非阻塞IO(non-blocking IO)Linux下,可以通过设置socket使其变为non-blocking,当对一个non-blocking socket执行读操作时,流程是这个样子 从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。从用户进程角度讲 ,它发起一个read操作后,并不需要等待,而
转载
2024-02-25 06:23:40
11阅读
竞态检测器;并发非阻塞缓存:串行版本,使用互斥锁,重复抑制,另一种实现-使用监控goroutine;小结:CSP并发模型
原创
2019-05-16 13:06:28
1306阅读
遇到的一个问题,大概是这样的。。。 前端页面上有一个列表,遍历列表按照并发度执行ajax操作,需要等上一个并发度执行返回结果后才能决定是否进行下一个并发度的执行。1、一开始的想法是,写一个ajax执行函数,传入每次执行的并发度,用for循环遍历列表,执行这个函数。比如有8个IP,然后并发度2,就for循环,执行4次的这个函数。但是,这样是不行的,因为ajax默认情况下是异步多线程的的,也就是说,我
1. 同步阻塞:客户端发送请求给服务端,此时服务端处理任务时间很久,则客户端则被服务端堵塞了,所以客户端会一直等待服务端的响应,此时客户端不能做事,服务端也不会接受其他客户端的请求。这种通信机制比较简单粗暴,但是效率不高。2. 同步非阻塞:客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候虽然客户端会一直等待响应,但是服务端可以处理其他的请求,过一会回来的。这种方式很高效,一...
原创
2021-07-28 10:25:50
223阅读
进程的概念 # 进程是系统(操作系统)进行资源分配和调度的基本单位 程序:做事的过程,而且是没有生命周期的 # 做菜的菜谱 进程:是动态的,是有生命周期的 # 做菜的过程 协程:解决单线程下的高并发 # 进程中还可以开线程 线程就是干活的人,进程不是干活的人 #线程——>做饭的人 线程就是最小的执行 ...
转载
2021-09-05 20:48:00
124阅读
2评论
1.老王烧开水的例子(1).同步阻塞老王用水壶烧水,并且站在那里,不管水开没开,每隔一定时
原创
2022-10-24 19:19:32
128阅读
1. 同步阻塞:客户端发送请求给服务端,此时服务端处理任务时间很久,则客户端则被服务端堵塞了,所以客户端会一直等待服务端的响应,此时客户端不能做事,服务端也不会接受其他客户端的请求。这种通信机制比较简单粗暴,但是效率不高种方式很高效,一...
原创
2022-02-20 10:17:31
383阅读
为什么使用协程?当多线程或者多进程足够多时,实际上并不能解决性能的瓶颈问题,也就是多线程和多进程对小规模的请求可以提高效率,过多的请求实际上会降低服务资源响应效率,因此协程是更好的解决文案。什么是协程?当一个程序遇到阻塞时,如果将这个程序挂起,然后将它的cpu权限拿出来去执行我们的其他程序,执行完后再回过头来执行这些挂起的程序,此时所有非阻塞操作已经执行完毕,最后在一起执行阻塞程序,是不是相当于做
转载
2023-11-27 20:29:27
58阅读
1. 并发 & 并行 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。简言之,是指系统具有处理多个任务的能力。 并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一 ...
转载
2021-07-29 06:35:00
204阅读
2评论
初始ConcurrentLinkedQueue ConcurrentLinkedQueue 是线程安全的无界非阻塞队列,其底层使用单向链表实现,对于入队和出队操作使用 CAS 来实现线程安全。 其类图如下: 其构造函数如下: /** * Creates a {@code ConcurrentLink ...
转载
2021-08-14 16:49:00
282阅读
2评论
在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法。在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的。 为了更好的理解阻塞算法和非阻塞算法之间的区别,我会先讲解阻塞算法然后再讲解非阻塞算法。 阻塞并发算法 一个阻塞并发算法一
原创
2021-08-02 09:12:24
271阅读
在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列非阻塞,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。 队列遵循先进先出,后进后出的原则。 阻塞式队列比非阻塞式队列性好。 阻塞式队列与非阻塞队列的区别: 阻塞
原创
2022-05-28 01:14:41
367阅读
1.结论 阻塞队列最主要是利用了 ReentrantLock 以及它的 Condition 来实现,而非阻塞队列则是利用 CAS 方法实现线程安全。 ArrayBlockingQueue 源码分析我们首先看一下 ArrayBlockingQueue 的源码,ArrayBlockingQueue 有以下几个重要的属性://用于存放元素的数组finalObject[]items;//下一次读取操作的位置inttakeIndex;//下一次写入操作的位置intpu...
原创
2021-06-04 19:18:09
953阅读
在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法。在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的。 为了更好的理解阻塞算法和非阻塞算法之间的区别,我会先讲解阻塞算法然后再讲解非阻塞算法。 阻塞并发算法 一个阻塞并发算法一
原创
2021-07-20 13:47:40
68阅读
最近在学python的网络编程,学了socket通信,并利用socket实现了一个具有用户验证功能,可以上传下载文件、可以实现命令行功能,创建和删除文件夹,可以实现的断点续传等功能的FTP服务器。但在这当中,发现一些概念区分起来很难,比如并发和并行,同步和异步,阻塞和非阻塞,但是这些概念却很重要。因
原创
2021-07-21 14:40:54
228阅读
java中的阻塞和非阻塞队列实现一个队列的线程安全,有两种方式:
1)使用阻塞队列,即出队和入队共用一把锁或者各自使用一把锁来实现
2)非阻塞队列:可以利用循环CAS的方式实现java中的阻塞队列阻塞队列是一个支持两个附加操作的队列,即支持阻塞的插入和移除。
1. 阻塞的插入:当前队列已经满了的时候,队列会阻塞插入元素的线程,直到队列不满
2. 阻塞的移除:当前队列为空的时候,获取元素的队
转载
2023-08-29 22:02:50
124阅读
阻塞排队买东西 在排队的过程中不能做其他事情非阻塞我在排队的过程中还可以玩手机 聊天等同步你等待事件返回结果异步不用等待事件返回结果事件会主动回调你...
原创
2022-12-13 10:23:24
505阅读
ZMQ特点普通的socket是端对端的关系,ZMQ是N:M的关系,socket的连接需要显式地建立连接,销毁连接,选择协议(TCP/UDP)和错误处理,ZMQ屏蔽了这些细节,像是一个封装了的socket库,让网络编程变得更简单。ZMQ不光用于主机与主机之间的socket通信,还可以是线程和进程之间的通信。ZMQ提供的套接字可以在多种协议中传输消息,线程间,进程间,TCP等。可以使用套接字创建多种消
转载
2024-03-17 11:25:42
88阅读
一、设备的阻塞与非阻塞 阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。被挂起的进程进入sleep状态,被调度器的运行队列移走,直到等待的条件被满足。在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。注:当使用socket()函数和WSASocket()函数创建套接字时,默
转载
2023-05-31 17:46:58
139阅读
源的现象,就叫互斥。同步(synchronous):进程之
转载
2023-05-22 17:51:31
81阅读