进程与线程,同步与异步,阻塞与非阻塞
进程:
进程是什么?
操作系统分配资源的最小单位,是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的
进程由什么组成?
1,进程控制块PCB 2,数据段 3,正文段
进程控制块PCB:
Linux系统为了节省进程控制块所占的内存空间,把每个进程控制块分成两部分。一部分为 常驻内存,另一部分为 非常驻内存(这部分内容可放磁盘的对换区中)
数据段: 三部分
用户栈区,用户数据区,系统数据区
正文段:是可重入的程序,能被若干进程共享
线程:
线程是什么?
线程是程序的最小单位,
为什么有线程?
因为各个进程内存独立,切换开销大,而各个线程之间共享程序的内存空间,通过时间片轮转的抢占式调度方式
进程与线程有什么区别?
进程是程序,线程是进程的执行单位,一个进程由一个或多个线程组成
子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间
单线程与多线程的区别?
单线程就是串行:多个任务,执行时一个执行完再执行另一个
多线程就是并发:多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程(抢占式调度),看起来像同时运行,实际上是线程不停切换
并行:每个线程分配给独立的核心,线程同时运行
多线程比单线程快吗?
不一定
在数量比较小的时候,很明显串行要比并发更快。
因为数量较小的时候,并发会花费很多时间在线程调度上。
多线程编程的缺点?(1)线程切换是有开销的,这会导致程序运行变慢。
(2)多线程程序必须非常小心地同步代码,否则会引起死锁。
(3)多线程程序极难调试,并且一些bug非常隐蔽,可能你99次运行都是对的,但是有1次是错的。不像单线程程序那么容易暴露问题。
为什么使用多线程而不使用多进程?
线程廉价,线程启动比较快,退出比较快,对系统资源的冲击也比较小。而且线程彼此分享了大部分核心对象(File Handle)的拥有权
什么是高并发?
高并发 ≠ 多线程
多线程是完成任务的一种方法,高并发是系统运行的一种状态,而多线程是应对高并发的一种解决方法
高并发:短时间内遇到大量操作请求(12306的抢票,双十一活动等),如对资源的请求,数据库的操作等
如果高并发处理不好,不仅仅降低了用户的体验度(请求响应时间过长),同时可能导致系统宕机,严重的甚至导致OOM异常,系统停止工作等
如果要想系统能够适应高并发状态,则需要从各个方面进行系统优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……而多线程只是其中解决方法之一
同步与异步:
同步和异步强调的是消息通信机制。
所谓同步,就是在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由“调用者”主动等待这个“调用”的结果。而异步则是相反,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在"调用"发出后,"被调用者"通过状态、通知来通知调用者,或通过回调函数处理这个调用
阻塞与非阻塞阻塞和非阻塞 强调的是程序在等待调用结果(消息,返回值)时的状态.
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 对于同步调用来说,很多时候当前线程还是激活的状态,只是从逻辑上当前函数没有返回而已,即同步等待时什么都不干,白白占用着资源。
参考:
进程与线程:https://www.cnblogs.com/qianqiannian/p/7010909.html