编程语言与进程线程

一种编程语言是多进程还是多线程,其根本由操作系统本身来决定,并不由语言实现来决定,因为进程与线程的这种机制本身就只取决于操作系统,而不取决于高级语言语言,对于内存分配以及cpu时间片段的分配利用,是由更低级的比操作系统低的语言来实现

Java的多线程

Java实现的是一种多线程的机制,就java本身概念而言(虚拟机规范),线程级别的

就进程与线程的概念,并不是java本身一个概念,它们是操作系统级别的概念,java只是将操作系统的这种方式进行了包装,而并非自己去实现一套cpu时钟与内存访问机制,java本身是跳不出操作系统层面的

对于一些老式的unix操作系统,它是没有线程概念存在的,它的异步协作方式就是多进程共享内存的方式来完成的,因此,在这种操作系统上,根本就不存在线程,java也没法实现线程,因此java就是多进程的应用程序,由多个java进程来完成协作,和PHP貌似就没啥区别了

在windows上面,进程间的内存空间是互相独立的,数据不能直接共享,它的异步协作方式由进程中的线程来完成,这些线程共享进程所属内存来完成异步协作,所以java在这种操作系统上,表现的就是单进程多线程的方式

PHP的单线程

PHP是一种解释型的web脚本语言,每个PHP文件的执行都是单线程的,有些时候读写数据库、文件、session等会加锁,会导致后面的请求挂起等待前面的请求执行完才继续,但是服务器是多线程的,每次对某个PHP文件的访问,服务器都会创建一个新的进程/线程,即,对于每次请求来说,PHP是单线程的,但是多个请求间是并发的

PHP使用多线程,需要使用多线程需要安装 pthread 扩展,而要安装 pthread 扩展,必须使用 --enable-maintainer-zts 参数重新编译 PHP,这个参数是指定编译 PHP 时使用线程安全方式
Web上面,PHP-FPM是一个多进程的FastCGI服务,master进程epoll异步接受请求并分发给worker进程处理。不建议在Web运行模式下使用pthreads多线程扩展,因为稍有不慎,就有可能让PHP-FPM的worker进程崩溃或发生错误

多进程其实是一种非常高效的服务器架构,比如20个核心的服务器开40个PHP-FPM worker进程就好,避免CPU过多的上下文切换开销,占用过多的内存,但是在高并发场景下并不适用

多线程与单线程理解

多线程程序的多个线程可以在多核 CPU 的多个核心同时运行,可以完全发挥机器多核的优势,所以多线程程序一般会比单线程程序更高效,多线程被操作系统调用的概率也更大

posted @   蚂蚁力量  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示