随笔分类 -  网络编程基础

摘要:一、Selectors模块 它具有根据平台选出最佳的IO多路机制,比如在win的系统上他默认的是select模式而在linux上它默认的epoll,建议使用selectors。 常用共分为三种:select、poll、epoll 二、用法 selectors server 下面开始强行解释了。。。。 阅读全文
posted @ 2017-12-19 11:59 Bigberg 阅读(508) 评论(0) 推荐(0) 编辑
摘要:一、前言 Python的select()方法直接调用操作系统的IO接口,它监控sockets,open files, and pipes(所有带fileno()方法的文件句柄)何时变成readable 和writeable, 或者通信错误,select()使得同时监控多个连接变的简单,并且这比写一个 阅读全文
posted @ 2017-12-15 20:12 Bigberg 阅读(9774) 评论(1) 推荐(3) 编辑
摘要:一、三者的区别 select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作。 select目前几乎在所有的平 阅读全文
posted @ 2017-12-14 19:41 Bigberg 阅读(587) 评论(0) 推荐(0) 编辑
摘要:一、I/O模式 对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段: 正式因为这两个阶段,linux系统产生了下面五种网络模式的方案。 - 阻塞 I/O(blockin 阅读全文
posted @ 2017-12-13 19:56 Bigberg 阅读(2822) 评论(0) 推荐(0) 编辑
摘要:一、前言 在事件驱动模型中,我们说当程序遇到I/O操作时,注册 一个回调到事件循环中,主程序继续做其他事情。当I/O操作完成后,再切换回原来的任务。这就是说I/O操作是和程序本身没关系的,其实I/O操作都是由操作系统来完成的。那么程序怎么知道I/O操作完成并切换回来呢?这就要求这个I/O操作处理完成 阅读全文
posted @ 2017-12-13 15:54 Bigberg 阅读(934) 评论(0) 推荐(0) 编辑
摘要:一、前言 通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求; (2)每收到一个请求,创建一个新的线程,来处理该请求; (3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求 上面的几种方式,各有千秋, 第(1)中方法, 阅读全文
posted @ 2017-12-12 15:30 Bigberg 阅读(12654) 评论(0) 推荐(2) 编辑
摘要:参考博客: http://www.cnblogs.com/alex3714/articles/5248247.html 一、前言 Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻 阅读全文
posted @ 2017-12-12 10:55 Bigberg 阅读(893) 评论(0) 推荐(0) 编辑
摘要:一、前言 进程间的通信Queue()和Pipe(),可以实现进程间的数据传递。但是要使python进程间共享数据,我们就要使用multiprocessing.Manager。 Manager()返回的manager对象控制了一个server进程,此进程包含的python对象可以被其他的进程通过pro 阅读全文
posted @ 2017-12-08 17:14 Bigberg 阅读(1160) 评论(0) 推荐(0) 编辑
摘要:一、概述 协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程。 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此: 协程能保留上一次调用时的状态(即所有局部状态的一 阅读全文
posted @ 2017-12-08 15:45 Bigberg 阅读(558) 评论(0) 推荐(0) 编辑
摘要:一、前言 进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进程,那么程序就会等待,直到进程池中有可用进程为止。进程池的作用可以在多进程程序中有效的控制进程运行的个数,维护系统的稳定。 二、multiprocessing.pool 2.1 apply(fu 阅读全文
posted @ 2017-12-07 17:44 Bigberg 阅读(1704) 评论(0) 推荐(0) 编辑
摘要:参考博客:http://blog.csdn.net/HeatDeath/article/details/72844120 一、前言 线程存在于进程中,对于同一个进程内的线程,该进程内的资源是共享的,各个线程可以竞争获取。而不同的进程有独立的内存空间,它们之间不能直接相互访问,那么进程和进程间如何相互 阅读全文
posted @ 2017-12-07 14:39 Bigberg 阅读(289) 评论(0) 推荐(0) 编辑
摘要:参考博客:https://www.cnblogs.com/vamei/archive/2012/10/12/2721484.html 一、前言 Python的线程或进程都是调用操作系统的原生线程或进程,但是由于GIL的存在,python多线程并不能利用cpu多核的优势。而python的进程是不存在G 阅读全文
posted @ 2017-12-06 16:13 Bigberg 阅读(584) 评论(0) 推荐(0) 编辑
摘要:参考博客:https://www.cnblogs.com/itogo/p/5635629.html 一、简介 Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递。其作用可以使程序实现松耦合即 阅读全文
posted @ 2017-11-30 19:59 Bigberg 阅读(358) 评论(0) 推荐(0) 编辑
摘要:一、前言 Python线程的Event(事件)用于主线程控制其他线程的执行,Event主要提供了 set、wait 、clear等方法 二、红绿灯实例 有个红灯停,绿灯行的简单事例: 汽车只会在绿灯的时候跑起来 阅读全文
posted @ 2017-11-29 19:54 Bigberg 阅读(332) 评论(0) 推荐(0) 编辑
摘要:一、前言 互斥锁 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去。 二、semaphore 信号量semaphore,是一个变量,控制着对公共资源或者临界区的访问。信号量维护着一个 阅读全文
posted @ 2017-11-29 10:04 Bigberg 阅读(683) 评论(0) 推荐(0) 编辑
摘要:一、互斥锁(Mutex) 在上节最后我们讲到了线程安全,线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。互斥锁为资源引入一个状态:锁定/非锁定。某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其 阅读全文
posted @ 2017-11-28 17:15 Bigberg 阅读(9253) 评论(0) 推荐(0) 编辑
摘要:参考博客:https://www.cnblogs.com/mindsbook/archive/2009/10/15/thread-safety-and-GIL.html https://www.cnblogs.com/MnCu8261/p/6357633.html http://python.job 阅读全文
posted @ 2017-11-27 17:36 Bigberg 阅读(733) 评论(0) 推荐(0) 编辑
摘要:一、前言 一个程序至少有一个主线程,主线程启动子线程后,它们之间并没有隶属关系。主线程和子线程执行是并行的,相互独立。主线程执行完毕后默认不等子线程执行结束就接着往下走了,如果有其他程序就会运行另外的程序,如果没有就等待子线程执行完成后结束程序。 结果: 二、join 等待子线程完成 如果在线程实例 阅读全文
posted @ 2017-11-13 15:26 Bigberg 阅读(1117) 评论(0) 推荐(0) 编辑
摘要:一、前言 我们知道单核cpu同时只能执行一个任务。如果在一个单核cpu的电脑上,我们可以同时登入qq、听音乐或者写文档等,给我们的感觉它们就是同时在进行的。这是由于cpu的分时技术,使它不断的进行上下文的切换,根据任务的优先级不停的在各个任务间切换执行。而且由于cpu运行太快,我们根本感觉不到它在切 阅读全文
posted @ 2017-11-09 19:03 Bigberg 阅读(492) 评论(0) 推荐(0) 编辑
摘要:参考博客:http://blog.csdn.net/zheng548/article/details/54669908 一、多道程序 多道程序设计技术是操作系统最早引入的技术,它的设计思想是允多个程序同时进入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求 阅读全文
posted @ 2017-11-09 11:24 Bigberg 阅读(328) 评论(0) 推荐(0) 编辑