1. 设备CPU进程号是随机产生还是有固定分配? 20200107
进程号是按照进程启动的顺序分配的,有些进程是在设备启动过程中调用的,这些进程启动的顺序是一定的,所以进程号就是固定的。
比如linux中init进程号一定是“1”。
而有些进程是设备完全启动后用户配置的,那这些进程号就是可变的[即便用户不配置, 有些进程的端口也是操作系统随机分配的 -- 参见<<PHP核心技术与最佳实践>>]。
即
简单说,有固定,有随机,系统初始进程是固定进程号的,后系统运行过程中,进程号便是随机产生的,类比于生活中,想一下也能明白~
2. 进程、线程、端口间关系
进程是指在系统中正在运行的一个应用程序;
线程是系统分配处理器CPU时间资源的基本单元,或者说 进程之内独立执行的一个单元。
对于操作系统而言,其调度单元是线程。
一个进程至少包括一个线程,通常将该线程称为主线程。
一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。
端口是计算机与外界通讯的出口,端口将接收到的数据包给到指定的应用程序来处理。
进程或是线程可同时监听多个端口. // key point
3. 什么是线程安全?
线程安全意味着二进制文件可以在多线程的Web服务器上下文中工作,如Windows上的Apache2。
【这句话也意味着,即便我们在编程语言中,没有开启/或者语言本身不支持多线程编程,我们的代码也是运行在多线程中,因为web容器本身就是多线程/多进程】
线程安全性的工作原理
是在每个线程中创建一个本地存储副本,这样数据就不会与另一个线程发生冲突。
Key Point:
只要是在多线程模式下运行,就可能存在线程安全问题.
解决方案:TBD
扩展问题:
所以线程安全存在诸多限制条件?
比如,文件是二进制文件,还要是在多线程的Web服务器中?
个人认为,存在这些疑问的原因在于,没有搞清楚线程安全的本质,本质原因.
Keep Learning
4. CPU核心数与线程的关系?四核八线程是什么意思?
这里面涉及到超线程技术,想要了解超线程技术,首先要了解CPU的核和线程到底是什么?
核是CPU的物理核心数量 线程是核心的工作进程[线程其实就是一种轻量级的进程]
核和线程是一种上下级关系
CPU的核负责运算和判断 线程则负责具体的数据处理工作
过去CPU的一个核心就对应着一个线程 处理数据的能力有限 只能通过堆更多的核心来提升CPU的性能 而现在因特尔发明了超线程技术 让一颗核心可以同时控制两个线程 将原本一颗核心的性能提升了一倍
以四核八线程的CPU为例 就是四核的CPU能够同时进行八线程的工作 性能与八核八线程的CPU相当 [在某些情况下]
简单来说
把核看作是CPU的将军,线程是将军手下的士兵 有的将军能力有限, 只能带一个兵 这样四核的CPU就只有四个士兵的战力 这就是简单的 单核单线程 的CPU
有的将军实力超群,能够同时带两个兵, 这样四核的CPU就拥有八个士兵的战力 这就是 单核双线程 拥有的超线程技术的CPU
那为甚么又说
线程是系统分配处理器CPU时间资源的基本单元?
TBD Keep Learning
5. 异步编程提升系统性能的本质 10 | 如何使用异步设计提升系统性能?-极客时间
看了不少的评论,感觉大家对操作系统这块都不是很熟悉,还是好好学习下操作系统吧,当然我是菜鸟,也需要好好学习。
还是说下个人的理解: "会出现机器的cpu、磁盘、内存都不高(因为等待的线程是不占CPU的)很多请求超时之类的情况。异步的话,就是让线程调用处理接口就直接返回" -- 这是下面某个网友的评论的一段话
系统资源的利用率不高,不代表那些系统资源你可以使用。 比如,并发请求,导致创建了很多的线程来处理,结果是,cpu,内存等系统资源虽然利用率不高,但是系统已经没办法,再创建线程,这时线程成了限制瓶颈,导致请求超时 --- 创建线程也是需要分配占用资源的,但是这些资源是否被利用,则是另外一回儿事儿,尽管线程等待的时候,会让出CPU,但是内存等系统资源,并不会让出,被系统回收,所以成为了限制瓶颈。
供参考
6. 关于Python 语言中的多线程/多进程相关问题 -- 可以帮助理解多进程/多线程,各个语言中的实现 25 | 答疑(二):GIL与多线程是什么关系呢?-极客时间 7. 01 | 使用了并发工具类库,线程安全就高枕无忧了吗? Java 01 | 使用了并发工具类库,线程安全就高枕无忧了吗?-极客时间 8. macOS 进程/线程 与 php脚本创建多进程执行 |