php线程安全与非线程安全问题

问题描述

究竟该如何选择PHP版本,什么是线程安全,什么又是非线程安全

解决方案

线程安全:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染
非线程安全(即线程不安全):线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

我选择哪个版本?

IIS
如果你使用的是PHP的FastCGI IIS,你应该使用非线程安全(NTS)版本的PHP。

Apache
请使用Apache Lounge提供的Apache构建。 他们提供了针对x86和x64的Apache的VC9,VC11和VC14版本。 我们使用他们的二进制文件构建Apache SAPI。

如果你使用PHP作为apache.org(不推荐)的Apache模块,你需要使用旧的Visual Studio 6编译的VC6版本的PHP。 不要使用apache.org二进制文件的VC9 +版本的PHP。

使用Apache,您必须使用Thread Safe(TS)版本的PHP。

解释如下:

从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。

为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。

因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。

使用git时出现的错误整理

##问题描述

1
warning: LF will be replaced by CRLF in tags/sublime/index.html.

原因分析

回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。
这两个ACSII字符不会在屏幕有任何输出,但在Windows中广泛使用【CRLF】来标识一行的结束。而在Linux/UNIX系统中只有换行符。
也就是说在windows中的换行符为 CRLF, 而在linux下的换行符为:LF
因为git是基于unix的,默认为LF,而现在使用的是windows,所以会提示 LF呗替换为CRLF

解决方案

删除刚刚生成的.git文件,代码

1
2
$ rm -rf .git  
$ git config --gobal core.autocrlf false

安装hexo时提示错误,使用npm安装速度慢

错误描述

英文:

1
npm WARN deprecated swig@1.4.2:This package is no longer maintained

翻译:npm WARN弃用swig@1.4.2:这个包不再维护

解决方案

使用国内安装源,这里使用淘宝的,命令如下:

1
npm install -g cnpm --registry=https://registry.npm.taobao.org

使用国内的安装源后命令变为cnpm,如下:

原来

1
2
3
4
5
6
$ npm install hexo-cli -g
$ npm install hexo-deployer-git
$ hexo init
$ npm install
$ hexo g
$ hexo s

现在

1
2
3
4
5
6
$ cnpm install hexo-cli -g 
$ cnpm install hexo-deployer-git
$ hexo init
$ cnpm install
$ hexo g
$ hexo s

问题描述

如果我不想使用国内的镜像怎么办呢,那也很简单,命令如下

1
$ cnpm onfig edit

找到bash registry=https://registry.npm.taobao.org将其注释即可

使用正则表达式批量替换冲突

在使用git 时出现 文件大面积冲突 为避免麻烦 使用正则表达式进行批量替换

总代码如下

1
2

(<<<<<*\sHEAD([\n]*)|====*\s(.[\n]*)(.*[\n])+.*(4ec633df87926745360d68b4aad6e5dd06c17400))

#拆分1 只匹配头部 也就是 <<<< HEAD 部分

1
2

<<<<<*\sHEAD([\n]*)

拆分2 匹配尾部

1
2
3
4

====*\s(.[\n]*)(.*[\n])+.*(4ec633df87926745360d68b4aad6e5dd06c17400)

高亮部分为你的 版本号 根据自己的情况定

此为高亮部分 4ec633df87926745360d68b4aad6e5dd06c17400 可替换为你想要的任意类型

你是本站第位访客 本站访客数人次
Fork me on GitHub