您的位置 首页 php

WEB开发进阶(07)(多线程,多进程)

随着 WEB开发 的深入, 多线程 这个概念我想大家是必须接触,学习,且应用的,话不多说,这篇主要分享关于多线程的那些事儿。

概念

多线程并不是什么多难的东西,明白其定义,原理后,应用就会水到渠成。在说明多线程之前,我们需要先了解下,多进程。最基础的来讲,CPU运行指令与一般的脚本运行一样,从上到下,且一段一段程序运行,但是,比如一个程序会死循环,我其他程序怎么办?都等他?这显然是不可能的,要同时运行多个程序,那 CPU 就必须有中断,和调度。就是,我一会运行A程序的相关指令,一会运行B程序的,在很小的时间间隔内跳转运行其他一个程序的代码片段,如此一来就告别单个脑的称呼。基于CPU可以中断和调度后,系统开发者就将这一概念实现为多进程了,无论是 WINDOWS 还是linux都存在着多进程,每个程序在运行的时候会向系统申请一个进程,专门管理我这个程序的运行,内存区域等等(这里就不深入了)。而线程,即一个进程内又有多个进程,为什么要这样?如果不是这样,你在打游戏的时候就没法实时才做了,因为你按下了方向键,电脑要处理完点击事件的所有操作才能再监听按键,这显然是不对的,所以可以这么说,图形界面的操作,就要基于多线程才行,不然一点击,一个下载,你屏幕就卡主不能动了,直到下载完成才能操作。

基于浏览器的多线程

如果你够仔细的话,打开WINDOWS 任务管理器 ,你会发现很多应用程序和对应的进程。当你尝试观察浏览器的进程时你会发现,例如 chrome ,每当打开一个窗口,就会有一个进程,这个chrome创建的,而当这个窗口去访问某一个网站时,我们会同时下载css js等资源文件,此时就是多线程方式同步下载的,不然都要等上一个文件下载完再下载下一个文件,不是搞笑么?

那么问题来了,当我们使用JS时,哪时候涉及到多线程了呢?其实,JS并没有多线程的编辑方法,因为浏览器并不支持,基于WEB的安全,浏览器的稳定运行,浏览器开发者压根不给我们这样的操作接口,只有JS脚本在使用一些特定组件时,比如 ajax 异步请求时,他会自动封装线程功能,而对于JS本身而言,settimeout也好 setInterval也好,其实并不是真正的多线程,而是一种堆栈形式而已。

服务端的多线程

这里我要先哭泣一下,因为PHP本身不是支持多线程或多进程管理的语言,这是天生的,而用后天的C++编写的PHP插件去实现,那又是另一回事。

拥有多线程或多进程管理支持的语言,可以轻易的做到父进程和子进程(父进程和多线程)的资源同步。简单点说就是,P程序运行时,开启了A进程和B进程,A进程和B进程可以访问P进程的一些变量,P进程在关闭时会自动关闭A进程和B进程,等等等等,这在实际开发服务端一些应用时,PHP就要通过其他方式来实现,更多的是通过系统级别去实现,就比较费劲,(python这方面都有。。。我~~!!!!)

如果有机会的话,我建议大家可以常识通过自己的服务端语言去编写开发以下如下的一些服务,比如消息队列服务,IM聊天服务器等等,都是需要多进程或多线程开发的,下面我发一张IM聊天服务器的简单结构实现。

文章来源:智云一二三科技

文章标题:WEB开发进阶(07)(多线程,多进程)

文章地址:https://www.zhihuclub.com/149198.shtml

关于作者: 智云科技

热门文章

网站地图