一.子线程无法访问父线程的全局变量,但父线程可以访问子线程的变量 <?php class Task extends Thread { public $data; public function run() { global $num; var_dump($num); $this->data = 'abc'; //这是打印null var_dump($GLOBALS); $GLOBALS['test'] = 'def'; } } //主线程中的全局变量,子线程中是无法访问的 //php中创建子线…
由于pthreads v3中引入了Threaded对象自动不变性的概念,所以当我们在构造函数中给成员设置为数组时,在其他地方就无法对成员再次改写了. 例子如下: <?php //pthreads v3引入了Threaded对象自动不变性的概念 //如果成员被设置成Threaded对象,那么它将不能被再次改写 //当然,这主要还是为了性能优化,但有时我们又需要改写成员,那么就需要继承自Volatile类了 class Task extends Thread { private $data; pri…
之所以会用到同步,是因为如果多个线程中对同一个资源进行操作时,会发生混乱. 比如2个线程对变量进行加1操作,第1个线程还没来的及改写数据时,第2个线程就对变量进行操作了,那变量最终的结果就是未知的,这个时候就需要同步来进行控制了. 例子如下: <?php class Count extends Thread { public $cnt = 0; public function run() { $this->add(); } public function add() { //对成员进行加1操作…
有些人会想,明明用thread已经可以很好的工作了,为什么还要搞个worker和pool? 之所以要用到worker和pool还是因为效率,因为系统创建一个新线程代价是比较昂贵,每个创建的线程会复制当前执行的整个上下文. 尽可能的重用线程可以让我们的程序更高效. 一个简单的worker例子: <?php //创建自定义work类,给work取个名字,方便查看 class Work extends Worker { private $name; public function __construc…
我的centos版本是7.4.1708,php的版本是7.2.4(注意要是线程安全版),如下图所示: 首先我们在如下网址下载好pthreads的源码: http://pecl.php.net/package/pthreads 如:pthreads-3.1.6.tgz 1.解压.并进入目录 > tar xf pthreads-3.1.6.tgz > cd pthreads-3.1.6 2.运行phpize,生成configure,如果没有配置PATH的,可以打上绝对路径. > phpize…
一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A: 这里其实是分别执行了两个事物,执行的结果是两个方法都可以插入数据!如下: 2.场景B: 修改上述代码如下: Propagation.REQUIRES_NEW的含义表示:如果当前存在事务,则挂起当前事务并且开启一个新事物继续执行,新事物执行完毕之后,然后在缓刑之前挂起的事务,如果当前不存在事务的话…
一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A: @RestController @RequestMapping(value = "/test") public class OrderController { @Autowired private TestService userService; @GetMapping public…
一.前言 .NET Core 目前更新到2.2了,但是直到现在在 .NET Core 本身依然不包括和图片有关的 Image.Bitmap 等类型.对于图片的操作在我们开发中很常见,比如:生成验证码.二维码等等.在 .NET Core 的早期版本中,有 .NET 社区开发者实现了一些 System.Drawing 的 Image等类型实现的组件,比如 CoreCompat.System.Drawing.ZKWeb.System.Drawing等.后来微软官方提供了一个组件 System.Draw…
问题现场 在多线程环境下使用HttpClient组件对某个HTTP服务发起请求,运行一段时间之后发现客户端主机CPU利用率呈现出下降趋势,而不是一个稳定的状态. 而且,从程序日志中判断有线程处于hang住的状态,应该是被阻塞了. 问题排查 一开始找不到原因,怀疑是多线程并发导致的死锁问题,但是通过代码审查并未定位到任何可能的多线程并发问题. 甚至开始怀疑是否是因为内存资源不够引起JVM频繁GC到导致业务线程被暂停,但是从GC的日志输出结果看,GC是正常的. 于是,进入一种丈二和尚摸不着头脑头脑的…
最近有一个项目, 进行步态识别的时候,同时需要显示摄像的实时画面.对于 Winform 显示画面,之前针对 rtmp 流的时候,是先写一个HTML 网页加载视频流,然后在IIS上发布,将地址直接赋值给winform中 WebBrowser 控件的Url值即可. this.webBrowser1.Url = new Uri("http://192.168.0.217:8063/player.html"); 针对HTML部分,网上有很多开源的Demo,已封装好,没啥值得研究的事情.本来顺顺…
当时的情况:mac下自带python2, 1.安装pyhon3: 首次从官网下载了安装包安装,安装目录在/Library/Frameworks/Python.framework/Versions/3.6/python/……下,后用pip3安装的包也在这个里面(site-package), 于是卸载了,使用homebrew安装,安装目录改在/usr/local/lib下 但同样无论如何也没能在/usr/local/bin生成环境变量,无论直接使用命令,原因:没有开启sip最高权限. 折腾了一天,选…
我们使用pthreads,来写一个多线程的抓取页面小程序,把结果存到数据库里. 数据表结构如下: CREATE TABLE `tb_sina` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `url` varchar(256) DEFAULT '' COMMENT 'url地址', `title` varchar(128) DEFAULT '' COMMENT '标题', `time` datetime DEFAULT…
相信用过spring-session做session共享的朋友都很喜欢它的精巧易用-不依赖具体web容器.不需要修改已成项目的代码.笔者在使用spring-session的过程中也对spring-session的绝佳包容性.稳定性赞叹不已,spring-session 和 redis 的结合堪称神器,但是两者结合下来真的可以完全代替原本的session管理吗? 一.url rewrite保持Session 相信很多做过文件上传的朋友遇到过这样的需求-在浏览器中显示上传进度条并且要求多浏览器兼容性…
开发的vue项目终于告一段落,终于是可以部署在测试服务器给客户看了,期间也是遇到各式各样的坑. 1.有些bug在谷歌是在没问题的,在ie上就会暴露出来,因为其中一个模块设计多个类型资源的列表,所以写纯模板的vue是行不通的,所以考虑写rander或者是jsx, 最终是选择了些jsx,rander当时写的时候还不是特别熟练.(不过看完vue-rander部分的源码,问题不大,还是要多多看源码). 其间往jsx中传入一个图片的地址,是对象中的一个属性.我传的文件的地址,一直给我报 vue Error…
前言:由于公司占时没有运维,出于微服务的需要,Apollo只能先装在windows 阿里云上跑起来,由于环境及网络等问题,在安装过程中遇到很多坑,算是一个个坑填完后,最终实现. 一. java jdk环境 java jdk 1.8下载地址: https://www.oracle.com/java/technologies/javase-jdk8-downloads.html   建议JDK安装目录不要带有中文.[空格].特殊符号等,例如:Program Files 这种会导致使用Quick St…
mysql中now()函数的使用,还有oracle的sysdate 在需求中如果系统中药添加当前操作的时间那么很简单的一个操作在写sql的时候直接在这个字段对应的位置写上now()函数就可以了,这样就少些了很多代码,尤其是在在用jdbc时写的时候,可以少写一些关于占位符的代码,但是这样做是有一个隐含的前提的是数据库和服务器是在同一个机器上的,如果不在同一台机器上,那么这样写就是一个坑啊,我觉得没有经验,没有掉进过坑的人就会这样写,比如我,偷懒就会这样写.等到用到这个时间来比较或者作为业务逻辑的判…
一.利用n 升级Node.js 最近在用NPM安装一个nodejs工具时发现,我的nodejs的版本有些旧了.这不是大问题,只要升级就可以了,当然,重新从nodejs.org最新版本是一种方法,但我想应该有更简单的方法,那就是使用 n 这个工具包,我们可以使用NPM先安装 n 工具包,然后用它升级nodejs,十分的方便. sudo npm cache clean -f sudo npm install -g n sudo n stable 上面这是使用 n 来安装最新的稳定版的nodejs.…
前几天因为要用到cc.pool,所以就换了v3.1版本,结果连生成apk的出错(cocos code ide), log显示为:error: relocation overflow in R_ARM_THM_CALL 查阅了各种资料是已解决: 把下面的语句LOCAL_ARM_MODE := arm 加到下面2个文件中/frameworks/runtime-scr/proj.android/jni/Android.mk /frameworks/js-bindings/bindings/Androi…
在Mac下Apache修改默认站点的目录时,遇到403错误, you don’t have permission to access / on this server 首先按照google到教程: 修改Apache目录 上面说到了mac下Apache的默认文件夹为/Library/WebServer/Documents,该目录默认是隐藏的,操作不是很方便,我们可以将其修改成自定义的目录. 打开终端,输入命令:sudo vi /etc/apache2/httpd.conf 找到如下两处 Docum…
最近在将原有代码迁移.NET Core, 代码的迁移基本很快,当然也遇到了不少坑,重构了不少,后续逐步总结分享给大家.今天总结分享一下ConfigurationManager遇到的一个问题. 先说一下场景: 迁移.NET Core后,已有的配置文件,我们希望做到兼容,比如说app.config和web.config, 这样配置文件尽可能地和.NET Framework是一套,尽可能低保持一致.比如:appSettings.自定义configSection等等. <?xml version="…
为什么要用keep-alive呢, 因为这个会缓存dom模板, 下次再回到这个页面, 就可以利用这个已经渲染好的dom结构了, 如果数据不一样, 也会启用 virtualDoM 进行diff更新, 这样也能节省 从 模板解析 到 html 这段时间, 不用重新再去 分析模板, 特别是地图应用, 应为地图绘制耗性能,地图一般是不变的, 只有数据发现变化 做成饼 开口 咬一下变形状 吃下去 created mounted activated deactivated 1. mounted以后就已经生成…
1.文件“XXX”正在由另一进程使用,因此该进程无法访问此文件. 原因剖析:文件在主线程操作,在子线程中读写操作文件,刚开始没有意识到程序的问题所在,总是在FileStream中报错,google后常规做法是读写文件加锁,但是依旧没有解决问题,最后定位到文件创建时返回流实例,但是没有关闭:File.Create("XX"); 解决方法:定位到问题后,改为File.Create("XX").Close(); 问题完美解决!…
vue项目上开发了一个输入pin码的组件.在某些安卓机器上.用户点击键盘后会自动失去焦点自动收起键盘.经过排查,发现是css属性font-size设置成0导致的.…
在ios10.2中的safri浏览器里无痕模式会导致localstorage不能正常使用 具体解决办法如下: if (typeof localStorage === 'object') { try { localStorage.setItem(); localStorage.removeItem('localStorage'); } catch (e) { Storage.prototype._setItem = Storage.prototype.setItem; Storage.protot…
安装: 检测是否已经安装了mysql rpm -qa | grep mysql 如果已经安装了,将其卸载,如: rpm -e --nodeps  mysql-libs-5.1.71-1.el6.x86_64 安装mysql 1.mkdir /usr/local/src/mysql 2.cd /usr/local/src/mysql 3.tar -xvf sMySQL-5.6.22-1.el6.i686.rpm-bundle.tar 安装server rpm -ivh MySQL-server-5…
在踩了自己按照网上的教程安装Ubuntu之后,仍然踩了不少坑,鼓捣了一段时间,才达到自己想要的界面.   下面就来说说,大家可能也会遇到的情况:   1.安装ISO镜像时候,路径直接选择 你从Ubuntu官网下载出来的rar的解压包,文件后缀是iso,不要解压这个解压包.否则虚拟机会一直提示你,系统路径不对.   2.Ubuntu在虚拟机上开机以后,会提示你安装VMware-install tools工具,安装就是了.   3.连接不上网络.试了很多办法都不行.最终:彻底关闭360,win+R打…
一般情况是这么操作的: 1.通过brew install安装应用最先是放在/usr/local/Cellar/目录下. 2.有些应用会自动创建软链接放在/usr/bin或者/usr/sbin,同时也会将整个文件夹放在/usr/local 3.可以使用brew list 软件名确定安装位置. 比如安装autojump应用之后会在这些地方创建(sudo find / -name "autojump"): /Users/jim/Library/Logs/Homebrew/autojump/u…
近期,在安装结巴分词的时候遇到一些问题,纠结了好一阵,跟大家分享下,希望能有所帮助.先说下安装环境: windows7, 64位系统 python3.6,python3.5在结巴分词的官方github上,描述了关于结巴分词(jieba)的安装步骤 全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba 半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python…
虽然知道ror在windows下的坑很多很多,但是目前没有先将就入门学习,也不折腾了.后面等待新机器来了,用linux来搭平台,先记录一下遇到的坑. 1.views/layouts/application.html.erb 要把 <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>改为<%= stylesheet_link_tag 'default', medi…
之前做了一次brew版本升级,然后用pip3安装的一个python命令就无法执行了(涉及到openssl库),执行就会报一个错误. ImportError: dlopen(/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so, 2): Library not loaded: /usr/local/o…