首页 > 其他分享 >什么是线程安全与非线程安全?

什么是线程安全与非线程安全?

时间:2022-08-29 21:48:02浏览次数:76  
标签:版本 Thread Safe 安全 线程 与非 PHP

如何判断PHP 是线程安全还是非线程安全的_longvslove的博客-CSDN博客  https://blog.csdn.net/longvslove/article/details/24532579
什么是线程安全与非线程安全?

线程安全就是在多线程环境下也不会出现数据不一致,而非线程安全就有可能出现数据不一致的情况。

线程安全由于要确保数据的一致性,所以对资源的读写进行了控制,换句话说增加了系统开销。所以在单线程环境中效率比非线程安全的效率要低些,但是如果线程间数据相关,需要保证读写顺序,用线程安全模式

这个主要是针对web server 而言,在windows环境下,如果你使用的web server 是apchae 或者 iis 7以下版本,则应该选择线程安全的安装文件,而如果你使用Fast-cgi模式时,可以选择非线程安全,因为 web sever 本身能保证线程安全。
当然还有二进制文件编译时所使用的编译器:vc9 (vs系列) vc6(gcc)

如楼上所言,是针对web server的,部分web server在处理应用请求的时候是用多线程而非多进程的方式处理,线程方式因为涉及到共享寄存器和内存,所以很容易出错,这个时候程序就需要花一些额外的经历去处理寄存器中的数据一致性,即保证线程安全。
所以是否采用线程安全主要看你的web server所采用的PHP请求处理方式,如果是多线程处理,那么请选择线程安全的,否则选择非线程安全的,如楼上所说Fast-cgi方式可选择非线程安全的

先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源

再来看PHP的两种执行方式:ISAPI和FastCGI。FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI(无论搭配 IIS 6 或 IIS 7)执行 PHP ,都建议下载、执行 non-thread safe 的 PHP (PHP 的二進位檔有兩種包裝方式:msi 、zip ,請下載 zip 套件)。而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。

说到这里,大家应该知道应该如何选择哪个版本的PHP了。None-Thread Safe or Thread Safe,您会选择哪个?

Windows下的PHP现在的版本已经是5.3.6,现在的Windows版本可以在PHP官方PHP For Windows(http://windows.php.net/download/)下载,下载的时候同版本有VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe等四个版本。那么这些版本有什么区别呢?

 VC9的版本是用legacy VS 2008编译的,VC6的版本是用legacy VS6编译的。

如果你是在windows下使用IIS+PHP的话,你需要下载VC9的版本。
如果你是在windows下使用Apache+PHP的话,你需要下载VC6的版本。

Non Thread Safe是指非线程安全,Thread Safe则是指线程安全。

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


如何判断:
通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版。

标签:版本,Thread,Safe,安全,线程,与非,PHP
From: https://www.cnblogs.com/jmbt/p/16637450.html

相关文章

  • 一次有趣的多线程调度问题
    线程1----wait()1Objecto=newObject();2waitAndNotifyMap.put(urlId,o);3System.out.println(urlId+"运行到阻塞");4synchronized(o){5o.wait(1000);6......
  • C++【多线程编程】之【线程安全】
    1.线程安全是什么?在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。2.什么情况......
  • Python爬虫之使用单线程+协程高性能扒取梨视频人物版块视频源码
    #由于request是基于同步的,因此asyncio的异步失效了#因此使用aiohttp来异步扒取importrequestsimportasyncioimporttimeimportosimportrandomfromlxmlimportetree......
  • nginx安全配置
    #safe_config_staradd_headerX-Xss-Protection"1;mode=block";add_headerX-Content-Type-Optionsnosniff;#add_headerX-Frame-OptionsDEN......
  • C++【多线程编程】之【初识线程创建】
    1.线程创建函数调用pthread_create(句柄、参数、函数入口,函数入口的实参)intpthread_create(....)cppthread类:thread类的创建方法比较简便。但也有很多问题需要考虑......
  • 2022第三届“网鼎杯”网络安全大赛-青龙组 部分WriteUp
    MISC签到题八道网络安全选择题,百度都能搜索到答案,这里如果只知道部分题目答案,可以通过枚举测试fuzz答案,获得flagflag:flag{a236b34b-8040-4ea5-9e1c-97169aa3f43a}REre693......
  • 多线程
    原子性:一个操作或多个操作要么全部执行,且执行过程不会被任何因素打断,包括其他线程,要么全部不执行   每个线程都有自己独立的工作内存,从主内存中copy内容保存在工作......
  • java使用多种方式实现多线程及线程池的使用
    ​ 一、多线程实现了什么?为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作时或处理......
  • 【c++】线程同步改错题 (互斥体)
     题目:#include<iostream>#include<windows.h>#include<tchar.h>//我想使用线程,让线程按我制定?的方案执行,但是总失败//起床-》吃饭-》工作-》回家-》起床HA......
  • 某信息安全公司面试题
    ......