一.整体大纲 二.进程间通信概念及方法  Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication). 在进程间完成数据传递需要借助操作系统提供特殊的方法,如:文件.管道.信号.共享内存.消息…
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程 (APUE)…
Unix网络编程--卷二:进程间通信 本书是一部Unix网络编程的经典之作!进程间通信(IPC)几乎是所有Unix程序性能的关键,理解IPC也是理解如何开发不同主机网络应用程序的必要条件.本书从对Posix IPC和System V IPC的内部结构开始讨论,全面深入地介绍了4种IPC形式:消息传递(管道.FIFO.消息队列).同步(互斥锁.条件变量.读写锁.文件与记录锁.信号量).共享内存(匿名共享内存.具名共享内存)及远程过程调用(Solaris门.Sun RPC). 目录: 0.准备环境…
1.*函数(与方法)装饰器 装饰器背后的主要动机源自python 面向对象编程.装饰器是在函数调用之上的修饰.这些修饰 仅是当声明一个函数或者方法的时候,才会应用的额外调用. 装饰器的语法以@开头,接着是装饰器函数的名字和可选的参数.紧跟着装饰器声明的是被修饰 的函数,和装饰函数的可选参数.装饰器看起来会是这样: @decorator(dec_opt_args) def func2Bdecorated(func_opt_args): : 那么什么是装饰器? 现在我们知道装饰器实际就是函数.我们也…
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面 学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面 学习ASP.NET C…
上一章我们已经简要的介绍了Java中的一些锁,本章我们就详细的来说说这些锁. synchronized锁 synchronized锁是什么? synchronized是Java的一个关键字,它能够将代码块(方法)锁起来 它使用起来是非常简单的,只要在代码块(方法)添加关键字synchronized,即可以实现同步的功能~ public synchronized void test() { .... } synchronized是一种互斥锁 一次只能允许一个线程进入被锁住的代码块 synchron…
C#编程规范 1.要使一个代码块内的代码都同意缩进一个tab键长度 2.有下列情况下建议有换行 方法之间: 局部变量和它后边的语句之间: 方法内的功能逻辑部分之间: 3.{和}要单起一行 4.每行建议只有一条语句 5.注释的长度不要超过屏幕的宽度,换行后的代码应该缩进一个tab,不要删除别人的注释 6.使用完整的英文描述名,如firstName,变量不要使用下划线,与硬件相关的定义除外,对于已有相同或相似含义的变量,不要重复定义. 标识符大小写规则 标识符 示例 命名空间 namespace  …
进程间通信(IPC)是指能在两个进程间进行数据交换的机制.现代OS都对进程有保护机制,因此两个进程不能直接交换数据,必须通过一定机制来完成. IPC的机制的作用: (1)一个软件也能更容易跟第三方软件或内核进行配合的集成,或移植.如管道,在shell 下执行 ps –aux | grep bash. (2)简化软件结构, 可以把一个软件划分多个进程或线程,通过IPC,集成在一起工作.如消息队列. (3)让操作系统各个模块交换数据,包括内核与应用程序机制. (4)提供进程之间或同一进程之间多线程的…
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9663028.html HTTP概要 理解Web服务器端: 编写HTTP(超文本传输协议)服务器端,即Web服务器端,我们可以这样定义它:基于HTTP协议,将网页对应文件传输给客服端的服务器端.HTTP是以超文本传输为目的而设计的应用层协议,这种协议同样属于基于TCP/IP实现的协议. 好,再来看看这样一个例子帮助我们理解:想想我们平时用浏览器打开某个网页,首先浏览器地址栏输入url确认,这其…
一.管道 管道的名称很形象,它就像是一个水管,我们从一端到水然后水从令一端流出.不同的是这里说的管道的两边都是进程.从一端往管道里写数据,其它进程可以从管道的另一端的把数据读出,从而实现了进程间通信的功能. 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 1.管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道: 2.只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程): 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普…
http://blog.chinaunix.net/uid-12868584-id-92807.html 写的灰常好,我就转载了 一.什么是进程间通信 IPC是进程间通信的简称,所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂.机制不同,复杂度也不一样.通信是一个广义上的意义,不仅仅指传递一些massege.还包含进程之间的合作等. 二.进程间通信的分类 进程间通信大致可分为本地进程间通信和网络进程间通信. 三.进程间通信的几种主要手段 1.管道(Pipe)及有…
一.整体大纲 二.基础知识 1. 进程相关概念 1)程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁....)     进程,是一个抽象的概念,与操作系统原理联系紧密.进程是活跃(运行起来的)的程序,占用系统资源.在内存中执行.(程序运行起来,产生一个进程).     程序 → 剧本(纸) 进程 → 戏(舞台.演员.灯光.道具...),同一个剧本可以在多个舞台同时上演.同样,同一个程序也可以加载为不同的进程(彼此之间互不影响)     如:同…
进击のpython ***** 并发编程--GIL全局解释锁 这小节就是有些"大神"批判python语言不完美之处的开始 这一节我们要了解一下Cpython的GIL解释器锁的工作机制 掌握一下GIL和互斥锁 最后再了解一下Cpython下多线程和多进程各自的应用场景 首先需要明确的一点就是GIL不是Python的特性 他是实现Python解释器(Cpython)时所引入的一个概念 当然Python不止这一个解释器来编译代码 只是因为Cpython是大部分默认环境下的Python执行环境…
第11章 线程池的使用 第8章讲述了如何使用让线程保持用户方式的机制来实现线程同步的方法.用户方式的同步机制的出色之处在于它的同步速度很快.如果关心线程的运行速度,那么应该了解一下用户方式的同步机制是否适用. 到目前为止,已经知道创建多线程应用程序是非常困难的.需要会面临两个大问题.一个是要对线程的创建和撤消进行管理,另一个是要对线程对资源的访问实施同步.为了对资源访问实施同步,Wi n d o w s提供了许多基本要素来帮助进行操作,如事件.信标.互斥对象和关键代码段等.这些基本要素的使用都非…
notify通知的遗漏很容易理解,即threadA还没开始wait的时候,threadB已经notify了,这样,threadB通知是没有任何响应的,当threadB退出synchronized代码块后,threadA再开始wait,便会一直阻塞等待,直到被别的线程打断. 实例见 :https://git.oschina.net/wenjieyatou/threadTest 在threadB进行通知之前,先将okToProceed置为true,这样如果threadA将通知遗漏,那么就不会进入wh…
1.异常:描述出错信息的对象. 字节码校验时,如发生错误,则会抛出异常. 2.所有异常的父类是Exception,异常可以捕获,可以处理. 所有错误的父类是Error,错误可以捕获,但不能处理. Throwable是Exception和Error的父类. 3.通过try{}catch(Exception e){e.printStackTrace();}可以捕获异常,其中try表示需要检测的代码块,catch表示捕获,Exception e表示创建变量e,如果try块中抛出了异常,虚拟机就用e变量…
---恢复内容开始--- 1) C++的"高级"特性,是它的优点也是它的缺点,微软对于使用C++写内核程序即不推崇也不排斥,使用C++写驱动需注意: a)New等操作符不能直接使用,如果要使用,必须进行重载. b)标准C接口的声明,在包含头文件以及入口例程的前面要声明extern "C" c)类的静态成员函数的使用:在类内部声明一个静态函数作为分发函数Dispatch,这个静态函数当做普通的C函数调用,而C++声明的非静态函数调用该函数进行分配. 这一部分读下来,其…
史上最清晰的线程池源码分析 鼎鼎大名的线程池.不需要多说!!!!! 这篇博客深入分析 Java 中线程池的实现. 总览 下图是 java 线程池几个相关类的继承结构:    先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) 接口方法定义. ExecutorService 也是接口,在 Executor 接口的基础上添加了很多的接口方法,所以一般来说我们会使用这个接口. 然后再下来一层是 AbstractExecuto…
1.五种I/O模式是哪几个? 阻塞I/O,非阻塞I/O,I/O多路复用,信号驱动I/O(SIGIO),异步I/O 一般来讲程序进行输入操作有两个步骤,一是等待有数据可读,二是将数据从系统内核中拷贝到程序的数据集区. 对于一个套接字的数据操作,第一步就是等待数据从网络上传到本地,当数据包到达时,数据将会从网络层拷贝到内核的缓冲中,第二步就是从内核中将数据拷贝到程序的数据区中. 2.五种阻塞模式简介 1)阻塞I/O模式 套接字建立后默认的模式就是阻塞I/O模式,对于UDP而言,数据就绪的标志比较简单…
同步应用 多个线程有序执行 from threading import Thread,Lock from time import sleep class Task1(Thread): def run(self): while True: if lock1.acquire(): print("------Task 1 -----") sleep(0.5) lock2.release() class Task2(Thread): def run(self): while True: if…
epoll版-TCP服务器 1. epoll的优点: 没有最大并发连接的限制,能打开的FD(指的是文件描述符,通俗的理解就是套接字对应的数字编号)的上限远大于1024 效率提升,不是轮询的方式,不会随着FD数目的增加效率下降.只有活跃可用的FD才会调用callback函数:即epoll最大的优点就在于它只管你“活跃”的连接,而跟连接总数无关,因此在实际的网络环境中,epoll的效率就会远远高于select和poll. 2. epoll使用参考代码 import socket import sel…
1.new Thread的弊端如下: a. 每次new Thread新建对象性能差. b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom. c. 缺乏更多功能,如定时执行.定期执行.线程中断. 相比new Thread,Java提供的四种线程池的好处在于: a.重用线程池中存在的线程,避免因为线程的大量创建和销毁所带来的性能开销 ,完成一项任务的时间T=创建线程的时间+在线程中执行任务的时间+线程销毁的时间, 而线程池的出现可以大大减少创建线程的时间…
用户定义的数据类型转换 C#同意定义自己的 数据类型,这意味着须要某些 工具支持在自己的数据类型间进行数据转换.方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须声明为隐式或者显式,以说明怎么使用它. C#同意用户进行两种定义的数据类型转换,显式和隐式,显式要求在代码中显式的标记转换,其方法是在原括号里写入目标数据类型. 对于提前定义的数据类型,当数据类型转换时可能失败或者数据丢失,须要显示转换: 1.把int数值转换成short时,由于short可能不够大,不能包括转换的数值.…
本章的内容是开发一个简单的.多用户数据库的C函数库.调用此函数库提供的C语言函数,其他程序可以读取和存储数据库中的记录.绝大部分商用数据库函数库提供多进程同时更新数据库所需要的并发控制,采用建议记录锁.B+树.动态散列实现数据库. 1.函数库 开发类似ndbm函数库,增加了并发控制机制,从而允许多进程同时更新同一数据库.函数接口如下: 1 #include "apue_db.h" 2 DBHANDLE db_open(const char *pathname, int oflag, .…
Java为开发提供了很多有用的工具类,这些工具类可以帮助我们更加高效的编写并发程序,本篇我们将介绍这些实用工具的用法. ThreadLocal ThreadLocal类用于解决多线程共享一个变量的问题,当多线程访问同一个变量时可能会导致结果的错误,防止这种错误第一种办法就是使用锁来保护对象:第二种方法就是彻底根除共享,即每个线程访问自己私有的变量.有的同学会觉得第二种方法就会有一些局限性,因为有些时候不得不共享同一个变量.是的确实有局限性,但是在很多情况下是可以不共享变量就能达到同样的效果,Th…
本节主题:如果一个类是线程不安全的,但是又要在多线程程序中安全地使用,你该怎么办? 大体有两种思路: 第一种:确保该对象是能由单个线程访问,也就是这个对象是被封闭在线程中的: 第二种:通过锁来对该对象的访问进行保护. 实例封闭 封装简化了线程安全类的实现过程,提供了一种实例封闭机制(Instance Confinement). 当一个对象被封装到另一个对象中时,能够访问被封装对象的所有的代码路径都是已知的,与不安全的类散落在整个程序中相比,更加易于分析.通过将封闭机制与合适的加锁策略结合起来,可…
捕获异常 前面主要说了关于异常的一些基础和理论知识,没有进入到正真的异常案例,这一讲通过几个案例来描写叙述一下异常的捕获和处理. 案例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 异常处理 { class Program { int result; Program() { result…
[版权声明:转载请保留出处:blog.csdn.net/gentleliu. Mail:shallnew at 163 dot com] 从字面上能够看出.paste命令和cut命令功能相反,cut命令是从文件行中取出字段,而paste命令是将文件行信息合并到一行. paste命令用法为: paste -d -s -file1 file2 -s选项是将文件行合并成一行. 比方现有例如以下文件: # paste 1.file name allen bob chris dyao # paste 1.…
上一节我们说到了基本原子类的简单介绍,这一节我们先来看一下基本类型: AtomicInteger, AtomicLong, AtomicBoolean.AtomicInteger和AtomicLong的使用方法差不多,AtomicBoolean因为比较简单所以方法比前两个都少,那我们这节主要挑AtomicLong来说,会使用一个,其余的大同小异. 1.原子操作与一般操作异同 我们在说原子操作之前为了有个对比为什么需要这些原子类而不是普通的基本数据类型就能满足我们的使用要求,那就不得不提原子操作不…
一.ThreadPoolExecutor 参数说明 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) corePoolSize:核心线程池的大小.当提交…