![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 90
兰亭落雪
目的不能抵达怎么付出都是偏差。
展开
-
磁盘性能评价指标—IOPS和吞吐量
目录概念介绍IOPS和数据吞吐量适用于不同的场合:磁盘服务时间常见磁盘平均物理寻道时间为常见硬盘的旋转延迟时间为影响测试的因素队列深度说明概念介绍IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS是关键衡量指标。原创 2020-08-28 14:32:26 · 786 阅读 · 0 评论 -
Windows下进程间通信
1进程与进程通信 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通...原创 2019-03-17 20:02:27 · 139 阅读 · 0 评论 -
windows下线程间的通信、同步方式
1、线程间的通信方式使用全局变量 主要由于多个线程可能更改全局变量,因此全局变量最好声明为violate 使用消息实现通信 在Windows程序设计中,每一个线程都可以拥有自己的消息队列(UI线程默认自带消息队列和消息循环,工作线程需要手动实现消息循环),因此可以采用消息进行线程间通信sendMessage,postMessage。 1)定义消息#define WM_...原创 2019-03-17 20:03:15 · 1217 阅读 · 0 评论 -
进程间通信
1 引言----进程间通信的主要目的是实现同一计算机系统内部的相互协作的进程之间的数据共享与信息交换,由于这些进程处于同一软件和硬件环境下,利用操作系统提供的的编程接口,用户可以方便地在程序中实现这种通信;应用程序间通信的主要目的是实现不同计算机系统中的相互协作的应用程序之间的数据共享与信息交换,由于应用程序分别运行在不同计算机系统中,它们之间要通过网络之间的协议才能实现数据共享与信息交换。...原创 2019-03-17 20:04:10 · 199 阅读 · 0 评论 -
linux进程间通信
进程间通信(Interprocess Communication, IPC),经典的IPC:管道、FIFO、消息队列、信号量以及共享存储和套接字。 一、管道 管道是UNIX系统IPC的最古老的形式,所有的UNIX系统都提供此种通信机制。 1·、两个局限性: (1)半双工,数据只能在一个方向流动,现在有些系统可以支持全双工管道,但是为了最佳的可移植性,应认为系统不支持...原创 2019-03-17 20:04:45 · 160 阅读 · 0 评论 -
互斥锁与信号量的作用与区别
“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号...原创 2019-03-17 20:05:09 · 639 阅读 · 0 评论 -
内存池
new和delete首先会转调用到malloc和free,这个大家应该很熟识了。很多人认为malloc是一个很简单的操作,其实巨复杂,它会执行一个系统调用(当然不是每一次,windows上是按页算),该系统调用会锁住内存硬件,然后通过链表的方式查找空闲内存,如果找到大小合适的,就把用户的进程地址映射到内存硬件地址中,然后释放锁,返回给进程。如果在多线程环境下,进程内的分配也会上锁,...原创 2019-03-17 20:11:03 · 105 阅读 · 0 评论 -
完成端口(Completion Port)详解
前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始动笔了,但愿还不算晚….. 这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为...原创 2019-03-17 20:13:28 · 1961 阅读 · 0 评论 -
进程间通信
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1...原创 2019-03-17 20:27:06 · 181 阅读 · 0 评论 -
互斥量与读写锁的异同与性能分析
结论:读写锁提高了并行性,但是就速度而言并不比互斥量快,在我的系统(ubuntu12.04)从上面的输出看到读写锁比互斥量明显速度方面不足。分析:一、线程同步简单的说就是当多个线程共享相同的内存时,当某个线程可以修改变量,而其他线程也可以读取或修改这个变量的时候,就需要对这些线程进行同步,以确保他们在访问变量的存储内容时不会访问到无效的数值。我们来看个上面一个对于多线程访问共享变量造成竞...原创 2019-05-02 16:55:34 · 1107 阅读 · 0 评论 -
自旋锁与信号量
自旋锁与信号量作为同步机制,都是用来保护临界区的,但是它们的工作方式完全不一样。自旋锁只有两种状态,即LOCKED与UNLOCKED。 而信号量既可以作为互斥锁来使用(此时具有0和1两种状态),也可以作为资源计数器来使用(此时为正整数,具有不同的值,例如:0,1,2,...) 进程在获取自旋锁时,会持续地查询锁的状态(读改写的原子操作),若未获取到锁则CPU会处于一直忙等待状态,这正是“自...原创 2019-05-07 08:48:15 · 338 阅读 · 0 评论 -
epoll
开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽,确实快,那么,它到底为什么可以高速处理这么多并发连接呢?intepoll_create(intsize); inte...原创 2019-05-01 20:45:01 · 101 阅读 · 0 评论 -
Linux下高并发最大连接数
1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制: ulimit -n 1...原创 2019-04-26 10:41:27 · 3450 阅读 · 0 评论 -
连接数问题
一、单机最大tcp连接数系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}。1、client最大tcp连接数client每次发起tcp连接请求时,除非绑定端口,通常会让系统选取一个空闲的本地端口(local port),该端口是独占的,不能和其他tcp连接共享。tcp端口的数据类型是unsigned short...原创 2019-05-28 09:05:22 · 864 阅读 · 0 评论 -
线程与进程小结
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。 一个程序至少一个进程,一个进程至少一个线程。一、进程与线程的区别地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。 ...原创 2019-05-29 10:39:34 · 691 阅读 · 0 评论 -
内存池技术
一、 自定义内存池性能优化的原理在编程实践中,不可避免地要大量用到堆上的内存。例如在程序中维护一个链表的数据结构时,每次新增或者删除一个链表的节点,都需要从内存堆上分配或者释放一定的内存;在维护一个动态数组时,如果动态数组的大小不能满足程序需要时,也要在内存堆上分配新的内存空间。1、 默认内存管理函数的不足利用默认的内存管理函数new/delete或malloc/free在堆上分...原创 2019-06-02 13:54:21 · 1249 阅读 · 2 评论 -
C++ 语言特性的性能分析
一、影响性能的因素大多数开发人员通常都有这个观点,即汇编语言和 C 语言适合用来编写对性能要求非常高的程序。而 C++ 语言的主要应用范围是编写复杂度非常高的程序,但是对性能要求不是那么严格的程序。但是事实往往并非如此,很多时候,一个程序的速度在框架设计完成时大致已经确定了,而并非是因为采用了C++语言才使其速度没有达到预期的目标。因此当一个程序的性能需要提高时,首先需要做的是用性能检测工具对...原创 2019-06-02 14:36:08 · 838 阅读 · 0 评论 -
linux下高并发服务器实现
在做网络服务的时候tcp并发服务端程序的编写必不可少。tcp并发通常有几种固定的设计模式套路,他们各有优点,也各有应用之处。下面就简单的讨论下这几种模式的差异:单进程,单线程在accept之后,就开始在这一个连接连接上的数据收接收,收到之后处理,发送,不再接收新的连接,除非这个连接的处理结束。优点: 简单。缺点: 因为只为一个客户端服务,所以不存在并发的可能。应...原创 2019-03-17 20:01:59 · 684 阅读 · 1 评论 -
linux线程间通信及同步机制总结
线程间的通信有两种情况:1、一个进程中的线程与另外一个进程中的线程通信,由于两个线程只能访问自己所属进程的地址空间和资源,故等同于进程间的通信。2、同一个进程中的两个线程进行通信。本文说的就是第二种情况。关于进程间通信(IPC)可以看我的另一篇博文http://blog.csdn.net/a987073381/article/details/52006729比起进程...原创 2019-03-17 20:01:46 · 126 阅读 · 0 评论 -
select详解
inux关于并发网络分为Apache模型(Process per Connection (进程连接) ) 和TPC , 还有select模型,以及poll模型(一般是Epoll模型)Select模型极其作用:这文章讲述的很好,没必要重述已有的东西,就直接给链接 http://blog.csdn.net/turkeyzhou/article/details/8609360...原创 2019-03-17 19:59:11 · 367 阅读 · 0 评论 -
分块算法
1. 简介 存储系统的重复数据删除过程一般是这样的:首先将数据文件分割成一组数据块,为每个数据块计算指纹,然后以指纹为关键字进行Hash查找,匹配则表示该数据块为重复数据块,仅存储数据块索引号,否则则表示该数据块是一个新的唯一块,对数据块进行存储并创建相关元信息。这样,一个物理文件在存储系统就对应一个逻辑表示,由一组FP组成的元数据。当进行读取文件时,先读取逻辑文件,然后根据FP序...原创 2019-03-20 17:30:37 · 821 阅读 · 0 评论 -
线程键
线程存储的具体用法。1) 创建一个类型为 pthread_key_t 类型的变量。2)调用 pthread_key_create() 来创建该变量。该函数有两个参数,第一个参数就是上面声明的 pthread_key_t 变量,第二个参数是一个清理函数,用来在线程释放该线程存储的时候被调用。该函数指针可以设成 NULL ,这样系统将调用默认的清理函数。3)当线程中需要存储特殊值的时候,...原创 2019-03-14 13:44:00 · 180 阅读 · 0 评论 -
线程基本编程——线程函数大全
索引:1.创建线程pthread_create2.等待线程结束pthread_join3.分离线程pthread_detach4.创建线程键pthread_key_create5.删除线程键pthread_key_delete6.设置线程数据pthread_setspecific7.获取线程数据pthread_getspecific8.获取线程标示符pthread_self9.比...原创 2019-03-14 13:41:55 · 201 阅读 · 0 评论 -
Linux进程间通信——共享内存
一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可...原创 2019-02-28 20:42:06 · 66 阅读 · 0 评论 -
编译原理
第一章:编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代000码优化,目标代码生成解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序。解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等...原创 2019-03-17 18:13:58 · 3516 阅读 · 0 评论 -
调度算法的介绍及优缺点
调度算法是根据系统的资源分配策略所规定的资源分配算法。有的调度算法适用于作业调度,有的适用于进程调度,有的两者都适用。先了解几个术语到达时间、服务时间、开始时间完成时间、等待时间周转时间:完成时间-到达时间带权周转时间:周转时间/服务时间一、先来先服务(FCFS)/先进先出(FIFO)调度算法(1)概念:按照作业/进程进入系统的先后次序进行调度,先进入系统者先调度;即启动...原创 2019-03-17 18:35:18 · 3014 阅读 · 0 评论 -
进程的状态和转换 三态模型和五态模型
进程的引入由于早期未配置os的系统和单道批处理系统中程序是顺序执行的,然而这种方式浪费资源、系统资源利用率较低,从而出现了多道批处理系统。内存中可以同时装入多个程序,使其共享资源、并发执行。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,于是引入了“进程”什么是进程?进程是程序的一次执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是具有独立功能的程序在一个数...原创 2018-12-04 20:16:58 · 4658 阅读 · 0 评论 -
CS架构--网络通信--osi 协议---套接字socket--粘包
网络基础之网络协议篇---CS架构--网络通信--osi 协议---套接字socket--粘包1 C\S 客户端/服务器架构:1.硬件 C/S架构 (打印机)2.软件 C/S 架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频)C/S 架构 ...原创 2018-12-04 20:15:56 · 2086 阅读 · 0 评论 -
多线程编程
题目:子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次,试写出代码子线程与主线程必有一个满足条件(flag == num),不满足条件的那个线程不可能获取unique_lock(会在wait中释放),只有满足条件的线程才能获取锁,执行程序mutex m;//保护条件的互斥访问condition_vari...原创 2019-03-17 19:01:21 · 131 阅读 · 0 评论 -
线程与进程对比
●多进程和多线程的区别进程它是具有独立地址空间的,优点就是隔离度好,稳定,因为它是操作系统管理的,进程和进程之间是逻辑隔离的,只要操作系统不出问题的话,一个进程的错误一般不会影响到其它进程,缺点就是信息资源共享麻烦。而线程只是进程启动的执行单元,它是共享进程资源的,创建销毁、切换简单,速度很快,占用内存少,CPU利用率高。但是需要程序员管控的东西也比较多,相互影响出问题的机率较大,一个线程挂掉...原创 2019-03-17 18:56:36 · 279 阅读 · 0 评论 -
进程/线程同步的方式和机制,进程间通信
一、进程/线程间同步机制。临界区、互斥区、事件、信号量四种方式临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程...原创 2019-03-17 19:02:57 · 452 阅读 · 0 评论 -
操作系统原理:动态内存分配
用户层malloc的实现malloc的底层调用sbrk和mmapmalloc是C语言标准库函数,是在用户层实现的。在Linux里,malloc编译好,是在run-time的动态库so中,通过标准库头文件把api声明给调用者。malloc、realloc和free是C语言的用户层的标准库函数,底层调用的是mmap和sbrk函数。大致如下图:malloc 底层调用的 sbrk 和 mmap...原创 2019-03-17 19:03:43 · 607 阅读 · 0 评论 -
编译原理删除C/C++代码中的所有注释
要求“编写一个程序,删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套”。如果不考虑字符常量和字符串常量,问题确实很简单。只需要去掉//和/* */的注释。考虑到字符常量'\''和字符串常量"he\"/*hehe*/",还有类似<secure/_stdio.h>的头文件路径符号以及表达式5/3中的除号/,以及情况就比较复杂了。另外...原创 2019-03-17 19:30:06 · 8004 阅读 · 5 评论 -
零拷贝技术
如今几乎每个人都听说过Linux中所谓的"零拷贝"特性,然而我经常碰到没有充分理解这个问题的人们。因此,我决定写一些文章略微深入的讲述这个问题,希望能将这个有用的特性解释清楚。在本文中,将从用户空间应用程序的角度来阐述这个问题,因此有意忽略了复杂的内核实现。什么是”零拷贝”为了更好的理解问题的解决法,我们首先需要理解问题本身。首先我们以一个网络服务守护进程为例,考虑它在将存储在文件中的信息通过...原创 2019-03-17 19:55:43 · 206 阅读 · 0 评论 -
Epoll模型
1.内核中提高I/O性能的新方法epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。要使用epoll只需要这三个系统调用:epoll_create(2),epoll_ctl(2),epoll_wait(2)。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4)isanewAPIintroducedinLi...原创 2019-03-17 19:57:38 · 119 阅读 · 0 评论 -
poll模型原理
1.poll模型原理poll模型是基于select最大文件描述符限制提出的,跟select一样,只是将select使用的三个基于位的文件描述符改为使用一个数组的形式,对于各种可能的事件进行了一个包装 #include <sys/poll.h> int poll (struct pollfd *fds, unsigned int nfds, in...原创 2019-03-17 19:58:37 · 856 阅读 · 0 评论 -
Linux内存管理
Linux内存管理原理本文以32位机器为准,串讲一些内存管理的知识点。1. 虚拟地址、物理地址、逻辑地址、线性地址 虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻辑地址专指下文说的线性偏移前的地址)是一个概念。物理地址自不必提。内核的虚拟地址和物理地址,大部分只差一个线性偏移量。用户空间的虚拟地址和物理地址则采用了多...原创 2019-03-20 17:21:20 · 168 阅读 · 0 评论