
Linux
Linux
零度苏打
有彩虹
展开
-
五种典型的IO模型
典型IO模型阻塞IO非阻塞IO信号驱动IO异步IO多路转接IO多路转接IO的模型阻塞、非阻塞、同步、异步首先,IO过程是什么?-----等待+数据拷贝发起IO调用等待IO条件就绪将数据拷贝到缓冲区中进行处理阻塞IO为完成IO发起调用,若当前不具备IO条件则一直等待,这个过程不干其他事情,条件满足后才进行操作大部分的IO都是阻塞IO优:流程控制特别简单,清晰:一个IO完了才会进入下一个IO缺:对于资源没有充分利用,大部分时间都在等待IO就绪。为弥补缺点提出非阻塞IO非阻塞IO为完成原创 2020-05-21 21:28:18 · 454 阅读 · 0 评论 -
Linux进程管理总结【思维导图】
Linux进程总结Linux线程总结进程间通信信号读者写者模型生产者消费者模型哲学家就餐问题多进程编程原创 2020-04-15 14:11:34 · 418 阅读 · 0 评论 -
服务器模型、服务器编程框架——Linux高性能服务器
服务器模型C/S模型(客户端/服务器)如图:TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信过程中所有机器都是对等的。但由于资源(视频、新闻、软件等)都被数据提供者所垄断几乎所有的网络应用程序都很自然地采用了C/S 模型:所有客户端都通过访问服务器来获取所需的资源特点非对等服务,即客户端与服务器处于不对等地位体现:服务器有软硬件资源及运算能力而客户端没有,服务器提...原创 2020-03-31 16:00:41 · 243 阅读 · 0 评论 -
读者写者模型【设计模型】
一个交易场所:有存储区域来保存数据两种角色:读者、写者三种关系:读者与读者:没有关系写者与写者:互斥(不能同时操作)写者与读者:同步互斥(同步是写者优先)相较于生产者消费者模型,读者间不互斥,提高效率示例:#include <stdio.h>#include <pthread.h>#include <unistd.h>//定义读写锁...原创 2020-03-27 22:38:01 · 179 阅读 · 0 评论 -
软链接硬链接
概念针对源文件所创建的特殊文件。通过链接文件,可以解决文件的共享使用,访问源文件的数据。一种是软连接,一种是硬链接硬链接通过索引节点进行链接,与源文件共用一个inode,类似于文件的别名作用:允许一个文件有多个有效路径名,防止误删只能在同一个文件系统中的文件之间链接,不能对目录进行链接原理:类似引用计数,只删除一个链接不影响索引节点本身和其他链接,只有最后一个链接被删除并且有新...原创 2020-03-27 19:16:33 · 155 阅读 · 0 评论 -
epoll和select【常考点】
epoll和select都是I/O多路复用的技术,都可以同时监听多个I/O事件的状态。epoll支持水平触发和边沿触发两种模式epoll比select效率更高,效率差异的原因在于:epoll是触发式处理连接【基于I/O事件通知机制】,而select是轮询方式处理连接【基于轮询机制】epoll采用回调函数机制,不会线性遍历;select调用会线性遍历select数量限制:限制可操作的Soc...原创 2020-03-24 13:07:39 · 193 阅读 · 0 评论 -
socket实现TCP网络通信程序
TCP网络通信TCP通信是面向连接、可靠传输、面向字节流的服务端流程创建套接字:内核中创建socket结构体绑定地址信息:通过socket描述源端地址信息开始监听:告诉OS开始接收连接请求,由于TCP是面向连接的,通信前要建立连接。服务端要**接受客户端的连接请求【监听套接字】**会为客户端创建新的socket【通信套接字】,新的套接字中包含源端信息和对端信息,只用于和对应的客户端进行...原创 2020-03-23 18:05:02 · 791 阅读 · 0 评论 -
生产者消费者模型【设计模式】
了解场景:有生产者生产数据,消费者获取数据进行处理【一个场所,两种角色,三种关系】生产者与消费者不直接进行数据交互。生产者生产数据到数据缓冲带【常为队列】,消费者从缓冲区读取数据该模型解决的问题解耦合——不直接交互,实现模块分离支持并发支持忙闲不均——如生产过多,消费慢关系生产者与生产者:互斥(放入同一位时)消费者与消费者:互斥(取出同一位时)生产者与消费者:同步(生产...原创 2020-03-19 20:39:19 · 330 阅读 · 0 评论 -
bash中,1>&2是什么意思?
文件描述符每打开一个文件都有一个整数与之对应,这个整数就是文件描述符【0、1、2】0:标准输入(stdin)1:标准输出(stdout)2:标准报错输出(stderr)重定向符>:输入重定向符<:输出重定向符1>&2:标准输入重定向到标准错误输出...原创 2020-03-18 17:18:59 · 11991 阅读 · 2 评论 -
死锁(条件、预防、避免)
条件互斥条件:一个资源每次只能被一个进程使用请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺环路等待条件:若干进程之间形成一种头尾相接的循环等待资源关系预防死锁的预防是保证系统不进入死锁状态的一种策略。它的基本思想是要求进程申请资源时遵循某种协议,从而打破产生死锁的四个必要条件中的一个或几个,保证系统不会...原创 2020-03-15 13:04:29 · 504 阅读 · 0 评论 -
socket实现UDP网络通信程序
首先回顾socket套接字编程:socket就是一套网络编程接口:上层用户通过这些接口简单地完成网络通信传输不需要关心内部实现【类似中间件】五元组:(源IP地址,源端口,目的IP地址,目的端口,协议),用于标识数据,每个网络中数据都会包含套接字编程:使用socket接口实现通信网络通信:网络中两端主机上进程间通信,两端分别是客户端、服务器端客户端:永远主动发送请求,发送前必须知道服务器...原创 2020-03-12 11:45:28 · 430 阅读 · 0 评论 -
哲学家就餐问题——信号量/管程
问题应用程序中包含并发线程的执行时,协调处理共享资源的代表性问题五位哲学家住在一座房子,他们面前有一张餐桌,每个哲学家生活中只有思考和吃饭。经多年思考,哲学家们认为最有助于思考的事物是意大利面。因缺乏手工功能,每位哲学家需要用两把叉子来吃意大利面。如图:每个哲学家面前有个盘子,左右两边各一个叉子。现在设计一个算法来让哲学家就餐。算法必须互斥(没有两个哲学家能同时用一把叉子),同时要避免死锁...原创 2020-03-11 18:37:06 · 2020 阅读 · 0 评论 -
多进程编程——Linux高性能服务器
fork系统调用Linux下创建新进程#include <sys/types.h>#include <unistd.h>pid_t fork(void);在父进程中返回子进程PID,子进程中返回0失败返回-1并设置errno复制进程映像,在内核进程表中创建新的进程表项。子进程代码与父进程完全相同,同时子进程会复制父进程的数据(堆数据、栈数据、静态数据)新进...原创 2020-03-08 21:22:05 · 220 阅读 · 0 评论 -
Linux网络编程基础API——Linux高性能服务
socket地址API主机字节序和网络字节序字节序问题:(32位机)现代CPU累加器一次能装载4字节【一个整数】,这4字节在内存中的排列顺序会影响其被累加器装载成整数的值字节序分为大端字节序和小端字节序:字节序大端字节序小端字节序存储一个整数的高位字节存储在内存的低地址位低位字节存储在内存的高地址处整数的高位字节存储在内存的高地址处低位字节存储在内存的低地址处...原创 2020-02-29 21:05:36 · 257 阅读 · 0 评论 -
多线程总结
线程线程是什么?线程是进程中一条执行流。进程是一个pcb(是一个运行中程序的描述,Linux下是一个task_struct结构体(描述了程序的描述信息,从而实现操作系统对运行中程序的调度),Linux下线程是一个task_struct结构体,是一个pcb,这些pcb在一个运行中程序中共用一个虚拟地址空间(公用同一份资源),相较于进程【传统pcb】更加轻量化,因此Linux下线程是一个轻量级进程...原创 2020-02-28 17:23:17 · 230 阅读 · 0 评论 -
信号
信号量与信号是完全不同的两个概念函数可重入&不可重入原创 2020-02-26 16:35:26 · 155 阅读 · 0 评论 -
进程间通信
理解进程间通信是操作系统为用户提供的在不同进程之间传播或交换信息的方式。目的在于:数据传输->一个进程要把它的数据发送给其他进程资源共享->多个进程间共享同一份资源通知事件->一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一...原创 2020-02-18 21:10:20 · 211 阅读 · 0 评论 -
Linux基本指令总结
ls指令使用:ls [选项][目录或文件]功能:对于目录,列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。ls –a...原创 2020-02-17 21:11:19 · 350 阅读 · 0 评论 -
linux进程总结
冯诺依曼体系结构现代计算机中的硬件体系结构:包含输入/输出设备、存储器、中央处理器【运算器,控制器】。所有的设备都是围绕存储器工作的,存储器是所有设备之间的一个缓冲带。存储器:内存(吞吐量更高,但断电后数据丢失)硬盘(不会丢失)操作系统核心功能:统筹管理计算机上的软硬件资源,管理(仅管理信息)先描述再组织。作用:操作系统向上系统调用接口向下通过硬件驱动程序管理多个硬件。进程概...原创 2020-02-15 21:40:54 · 1144 阅读 · 0 评论 -
gdb——Linux C编程一站式学习
gdb是我们常用的调试工具,调试的基本思想仍然是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环,根据现象推测错误在哪里.单步执行和跟踪函数调用单步执行命令描述backtrace(bt)查看各级函数调用及参数finish连续运行到当前函数返回为止,然后停下来等待命令frame(或f) 帧编号选择栈帧info(或i) l...原创 2020-02-11 16:30:15 · 190 阅读 · 0 评论