系统编程
文章平均质量分 71
春夏与冬
有田不耕仓禀虚,有书不读子孙愚。宝剑锋从磨砺出,梅花香自苦寒来。少壮不知勤学苦,老来方悔读书迟。
展开
-
什么是协程
多进程并发:当一个进程阻塞时,切换到等待执行的进程把 CPU 利用起来。为了更合理的利用 CPU 资源,内存划分为多块,不同进程使用各自的内存空间互不干扰,CPU 可以在多个进程之间切换执行,让 CPU 的利用率变高。为了实现 CPU 在多个进程之间切换,需要保存进程的上下文(如程序计数器、栈等),以便下次切换回来可以恢复执行。还需一种调度算法,Linux 中采用了基于时间片和优先级的完全公平调度算法。进程的上下文切换涉及到从用户态->内核态->用户态的过程,并且上下文中包含非常多的数据。原创 2024-03-02 18:09:50 · 454 阅读 · 0 评论 -
如何使用锁
线程库需要保证,当一个线程使用特定互斥量锁住共享数据时,其他的线程想要访问锁住的数据,都必须等到之前那个线程对数据进行解锁后,才能进行访问。有一台打印机和一台笔记本,A 正占用笔记本,同时又提出使用打印机的请求,但此时打印机正被B 所占用,而B 在未释放打印机之前,又提出请求使用正被A 占用着的笔记本。有一台打印机,A要用打印机,B也要用打印机,但是打印机同一时间只能给一个人用。在用打印机之前要向领导申请许可证,用完后再向领导归还许可证,许可证总共只有一个,没有许可证的人等许可证(阻塞)。原创 2023-04-11 22:31:20 · 81 阅读 · 0 评论 -
线程池
线程池一种线程使用模式,线程过多会带来调度开销,进而影响缓存局部性和整体性能。线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。线程数过多会导致额外的线程切换开销。一个应用程序需要多次使用线程,也就意味着需要多次创建并销毁线程。而创建并销毁线程的过程会消耗内存。所以提出了线程池的概念。原创 2021-04-05 17:08:03 · 68 阅读 · 0 评论 -
实现一个聊天室功能的软件
服务端做数据处理:每一个用户是一个客服端,每一个用户上线服务端记录。每个用户的发言都会被服务端通知到其它给用户。原创 2020-01-21 21:41:29 · 374 阅读 · 0 评论 -
socket
套接字(Socket)是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。套接字是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。原创 2020-01-19 23:08:30 · 156 阅读 · 0 评论 -
定时器用法
定时器(timer)相当于系统每隔一段时间给进程发一个定时信号,需要定义一个信号处理函数。原创 2020-01-21 22:08:41 · 465 阅读 · 1 评论 -
epoll select
为了解决大量客户端访问的问题,引入IO复用技术。一个进程可以同时为多个客户请求服务,复用一个进程对多个IO进行服务。IO读写的数据多数情况下未准备好,需要通过一个函数监听这些数据状态,一旦有数据可以读写就触发服务。elect,poll,epoll都是IO多路复用的机制,监视多个描述符,一旦某个描述符就绪,通知程序进行操作。原创 2020-07-22 23:44:43 · 122 阅读 · 1 评论 -
嵌入式系统
ARM的功耗较低面积较小,所以各大厂商通常会把它的CPU和各类外围IP都放到一起,然后自己拿着图纸去流片,生产出来的也是一个正方形,下面有很多引脚,这个东西不仅包含了CPU,还包含了其他的控制器,这个东西就叫做。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。一个可以编写电路的一个东西,一般的比如单片机什么的它里面的电路都已经固化了,只需要把程序输入就行,而FPGA则是通过编程语言把你想要的电路给编出来,它的功能比较强大。原创 2020-01-19 22:09:14 · 459 阅读 · 0 评论 -
进程与线程间通信
一种”打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个”文件”,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。管道是在内核中开辟的一块缓冲区,程序拥有写入和读取的权利,可以看成一种特殊的文件,具有固定的读端和写端,也可以使用普通的read、write 等函数。进程中的线程间可以进行内存共享,通过定义和使用全局变量可以实现线程间的通信。原创 2020-04-22 23:00:33 · 247 阅读 · 1 评论 -
进程与线程
并行需要解决的问题是通常并行的进程比CPU数量多,而原则上同一时刻一个CPU只能分配给一个进程(引入线程后,CPU调度的基本单位是线程,进程是资源分配的最小单位),以便运行这个进程。要让CPU同时运行多个进程,必须使用并发技术,实现并发技术最常见的就是时间片轮转调度算法,即在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如1毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,好象所有的进程都在不间断地运行一样,给用户的感觉是并行。原创 2020-04-20 22:45:00 · 204 阅读 · 0 评论