WEB开发进阶(07)(多线程,多进程)
citgpt 2024-09-09 02:16 7 浏览 0 评论
随着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聊天服务器的简单结构实现。
相关推荐
- js中arguments详解
-
一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...
- firewall-cmd 常用命令
-
目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...
- epel-release 是什么
-
EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...
- FullGC详解 什么是 JVM 的 GC
-
前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...
-
2024-10-26 08:50 citgpt
- 跨域(CrossOrigin)
-
1.介绍 1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。 通俗讲...
- 微服务架构和分布式架构的区别
-
1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...
- 深入理解与应用CSS clip-path 属性
-
clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...
-
2024-10-25 11:51 citgpt
- Request.ServerVariables 大全
-
Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...
- python操作Kafka
-
目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...
- Runtime.getRuntime().exec详解
-
Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...
- promise.all详解 promise.all是干什么的
-
promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...
-
2024-10-24 16:21 citgpt
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracleclient (56)
- springbatch (59)
- oracle恢复数据 (56)
- 简单工厂模式 (68)
- 函数指针 (72)
- fill_parent (135)
- java配置环境变量 (140)
- linux文件系统 (56)
- 计算机操作系统教程 (60)
- 静态ip (63)
- notifyicon (55)
- 线程同步 (58)
- xcode 4 5 (60)
- 调试器 (60)
- c0000005 (63)
- html代码大全 (61)
- header utf 8 (61)
- 多线程多进程 (65)
- require_once (60)
- 百度网盘下载速度慢破解方法 (72)
- 谷歌浏览器免费入口 (72)
- npm list (64)
- 网站打开速度检测 (59)
- 网站建设流程图 (58)
- this关键字 (67)