系统编程
文章平均质量分 80
aMonstere
这个作者很懒,什么都没留下…
展开
-
Socket与多线程实践
上节回顾: 我们从应用层发数据发送方和接收方在不同的建筑里面,传输层有两个协议:TCP / UDP TCP / UDP 可以看作平行宇宙,互不干扰,接收方和发送方可以用TCP / UDP 服务器的每个端口是相互隔离的 TCP -> 快递协议1 UDP -> 快递协议2 SOCKET -> 快递员 SOCKET 每次在一个端口,记录信息,读取信息 如果想在一个端口同时用TCP / UDP, 那么在这一端口,生成两个SOCKET 快递员,分别为TCP / UDP原创 2021-10-04 00:44:07 · 238 阅读 · 0 评论 -
多线程编程基础
线程 什么是线程 pthread : p_thread, 线程是进程的分支。线程本质上是一种轻量级的进程。 进程调度的代价太高,并且内存独立,通信很麻烦,为了解决这两个问题,引入了线程。 多个线程共享的是同一片进程的空间,所以线程之间的通信,变得简单。 进程调度的时间为什么成本高? 进程之间调度有时间局部性,CPU建立缓存的过程,可能是为了运行效率的提升,进程刚运行的时候,内存会调度出去,缓存也会被清空,代价大,线程是共享的内存,线程切换不需要置换内存。原先线程建立的信息,另一个线程也是可以用的。 接口原创 2021-10-03 00:52:14 · 140 阅读 · 0 评论 -
进程间通信2
设计一个本机聊天功能 利用共享内存 #ifndef _CHAT_H #define _CHAT_H struct Msg { char name[20]; char msg[1024]; pthread_mutex_t mutex; pthread_cond_t cond; }; #endif #include "head.h" #include "chat.h" struct Msg *share_memory = NULL; int main() { i原创 2021-10-02 22:09:12 · 66 阅读 · 0 评论 -
进程间通信
shm 亲缘关系:父亲 + 孩子 / 亲兄弟之间 shmget 分配一个系统内存段 #include <sys/ipc.h>//ipc,进程间通讯 #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg); 返回值与key有关,key相同,返回的只相同,成功返回id 将id获取地址:shmat shmat void *shmat(int shmid, const void *shmaddr int sh.原创 2021-10-02 03:39:31 · 103 阅读 · 0 评论 -
高级进程管理
进程调度: 进程调度是一个内任务是核子系统 进程调度的主要任务是决定哪一个“就绪”状态的进程来执行 就绪进程就是非阻塞进程 阻塞进程就是正在睡眠的进程,需要内核唤醒的进程 进程的三态模型 协同式和抢占式 协同: 进程会一直运行知道它自己结束 操作系统不做干预 抢占: 调度器决定进程合适结束并执行另一个进程,这叫做抢占 进程被抢占前运行的时间称为该进程的时间片 调度器给每个进程分配一个处理器时间片 时间片: 时间片的长短会对于系统的全局行为和性能来说是至关重要的 时间片过长:-> 提升系统通吐率和原创 2021-10-01 01:32:20 · 121 阅读 · 0 评论 -
多进程 基础
多进程: 什么是进程 进程是程序在内存中的镜像 镜像:imag,把程序放在进程中就是进程 进程是正在运行的程序 进程是程序跑起来,调用在内存中,他在进程中构成的对象实例化,叫做进程 1. 什么是程序 (应用):程序的集合,编译好的,可执行的二进制文件(Linux中为普通文件,不过有x权限) 2. 什么是线程 进程接口有哪些 1. fork():创建一个子进程neg pid_t fork(void);//pid :process id,返回子进程呢个的id 父进程会拷贝自己一份,然后生成一份孩子进程 父亲和原创 2021-09-30 22:10:26 · 140 阅读 · 0 评论 -
阻塞IO与非阻塞IO
阻塞与非阻塞IO 阻塞的概念: 什么是阻塞 阻塞的代价 非阻塞的概念: 什么是非阻塞 非阻塞的优点 非阻塞的代价 非阻塞有什么用原创 2021-09-30 19:41:18 · 173 阅读 · 0 评论