网站首页 > 技术文章 正文
先说答案
因为资源有限,多线程的目的是为了最大限度的利用CPU资源。
(一)基本概念
1、Linux的底层是单进程,还是多进程?
答案:用单线程实现了多任务。
2、进程、线程、协程的区别是什么?
- 进程(process)是资源分配的最小单位,线程(thread)是处理机调度的最小单位。进程是由一个或多个线程组成的。
- 线程:初始单位为8MB,固定不可变;由 内核完成
- 协程:初始一般为 2KB,可随需要而增大;由用户完成
3、CPU有什么状态?
- 内核态:Linux文件子系统,I/O读写磁盘;发送HTPP请求;
- 用户态:
- 内核态和用户态的切换
(二)为什么资源有限,需要学IO模型?
1、系统中LINUX中单个进程理论上可以创建的最大线程数是多少?
以32 位 linux 为例,答案是381个。
默认线程栈是8M=8192KB
32 位 linux系统 进程用户空间是 3G 的大小,也就是 3072M 用3072M/8M=384。
但是实际上代码段和数据段等还要占用一些空间,这个值应该向下取整到 383,再减去主线程,得到 382。那为什么 linuxthreads 上还要少一个线程呢?这可太对了,因为 linuxthreads 还需要一个管理线程。
nofile进程最大打开文件描述符数65535
2、一个进程可以包含多个线程(381个),所以实际课执行进程会少很多。
而一个项目运行时,会有很多客户端并发请求服务器,假定有100个用户并发请求,每个请求有5个线程处理,直接就把系统整崩溃了。
那么如何处理高并发,也就是处理网络IO呢?
这就是我们为什么要学习IO模型的原因——可以通过优化网络IO来提高并发(资源的利用率)
以下是学习IO模型的几个重要概念:
(三)同步和异步
与消息的通知机制有关
本质区别 | 现实例子 | |
同步模式 | 由处理消息者自己去等待消息是否被触发 | 我去银行办理业务,选择排队等,排到头了就办理。 |
异步模式 | 由触发机制来通知处理消息者 | 我去银行办理业务,取一个小纸条上面有我的号码,等到排到我这一号时由柜台的人通知我轮到我去办理业务。 |
相关视频推荐
io_uring 新起之秀的linux io模式,是如何媲美epoll的
学习地址:https://ke.qq.com/course/417774?flowToken=1013300
需要C/C++ Linux服务器架构师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
(四)阻塞与非阻塞
与线程等待消息(无所谓同步或者异步)时的状态有关。
标题 | 本质区别 | 现实例子 |
阻塞调用 | 线程挂起,不能做其他事。 | 上面的那个例子,不论是排队还是使用号码等待通知,如果在这个等待的过程中,等待者除了等待消息之外不能做其它的事情,那么该机制就是阻塞的。 |
非阻塞调用 | 线程活跃,能处理其他事。 | 在银行办理这些业务的时候一边打打电话发发短信一边等待,这样的状态就是非阻塞的。 |
(五)它们之间的组合应用举例:
阻塞调用 | 阻塞调用 | 非阻塞调用 |
同步模式 | read/write | read/write O_NONBLOCK |
异步模式 | IO复用:select/poll,epoll(LT模式) | AIO系列:aio_read,aio_write等;epoll(ET模式) |
具体的IO模型,这里就不赘述了。
猜你喜欢
- 2024-10-21 面试官:NIO非阻塞网络编程原理了解吗?一文深度讲解避坑
- 2024-10-21 Java阻塞队列中的异类,SynchronousQueue底层实现原理剖析
- 2024-10-21 超详细的I/O多路复用概念、常用I/O模型、系统调用等介绍
- 2024-10-21 非阻塞同步算法与CAS(比较和交换)无锁算法 - 美因茨
- 2024-10-21 非阻塞同步机制和CAS 治疗青光眼的药物中,降压机制是使阻塞房角开放的是
- 2024-10-21 一文彻底搞定(阻塞/非阻塞/同步/异步)网络IO、并发编程模型
- 2024-10-21 一文搞懂什么是阻塞IO、信号驱动IO、Reactor模型、零拷贝
- 2024-10-21 Java面试常见问题:阻塞与非阻塞,同步与异步
- 2024-10-21 聊聊Java BIO(同步阻塞IO)、NIO(非阻塞IO)、AIO(异步IO)
- 2024-10-21 探索IO模型:从同步阻塞到异步非阻塞
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)