进程与线程,同步与异步,阻塞与非阻塞

进程:

进程是什么?

操作系统分配资源的最小单位,是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的

进程由什么组成?

1,进程控制块PCB  2,数据段  3,正文段

进程控制块PCB:

  Linux系统为了节省进程控制块所占的内存空间,把每个进程控制块分成两部分。一部分为 常驻内存,另一部分为 非常驻内存(这部分内容可放磁盘的对换区中)

数据段: 三部分

  用户栈区,用户数据区,系统数据区

正文段:是可重入的程序,能被若干进程共享

线程:

线程是什么?

线程是程序的最小单位,

为什么有线程?

因为各个进程内存独立,切换开销大,而各个线程之间共享程序的内存空间,通过时间片轮转的抢占式调度方式

进程与线程有什么区别?

进程是程序,线程是进程的执行单位,一个进程由一个或多个线程组成

子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间

单线程与多线程的区别?

单线程就是串行:多个任务,执行时一个执行完再执行另一个

多线程就是并发:多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程(抢占式调度),看起来像同时运行,实际上是线程不停切换

并行:每个线程分配给独立的核心,线程同时运行

多线程比单线程快吗?

不一定

在数量比较小的时候,很明显串行要比并发更快。

因为数量较小的时候,并发会花费很多时间在线程调度上。

多线程编程的缺点?(1)线程切换是有开销的,这会导致程序运行变慢。
(2)多线程程序必须非常小心地同步代码,否则会引起死锁。
(3)多线程程序极难调试,并且一些bug非常隐蔽,可能你99次运行都是对的,但是有1次是错的。不像单线程程序那么容易暴露问题。

为什么使用多线程而不使用多进程?

线程廉价,线程启动比较快,退出比较快,对系统资源的冲击也比较小。而且线程彼此分享了大部分核心对象(File Handle)的拥有权

什么是高并发?

高并发 ≠ 多线程

多线程是完成任务的一种方法,高并发是系统运行的一种状态,而多线程是应对高并发的一种解决方法

高并发:短时间内遇到大量操作请求(12306的抢票,双十一活动等),如对资源的请求,数据库的操作等

如果高并发处理不好,不仅仅降低了用户的体验度(请求响应时间过长),同时可能导致系统宕机,严重的甚至导致OOM异常,系统停止工作等

如果要想系统能够适应高并发状态,则需要从各个方面进行系统优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……而多线程只是其中解决方法之一

同步与异步:

同步和异步强调的是消息通信机制。

所谓同步,就是在发出一个"调用"时,在没有得到结果之前,该“调用”就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由“调用者”主动等待这个“调用”的结果。而异步则是相反,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在"调用"发出后,"被调用者"通过状态、通知来通知调用者,或通过回调函数处理这个调用

阻塞与非阻塞阻塞和非阻塞 强调的是程序在等待调用结果(消息,返回值)时的状态. 

 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 对于同步调用来说,很多时候当前线程还是激活的状态,只是从逻辑上当前函数没有返回而已,即同步等待时什么都不干,白白占用着资源。

 

参考:

进程与线程:https://www.cnblogs.com/qianqiannian/p/7010909.html

 

posted @ 2021-04-21 14:06  binbin_cloud  阅读(85)  评论(0编辑  收藏  举报