首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
阻塞专题
springboot体会BIO(阻塞式IO)
使用springboot体会阻塞式IO 大致的思路为: 创建一个socket服务端,监听socket通道,并打印出socket通道中的内容。 创建两个socket客户端,向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void main(String[] args) throws IOException {
阅读更多...
多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信
目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds 总结 fd_set操作接口 timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充 获取新连接 注意点 -- 通信时的调用函数 添加新fd到
阅读更多...
多线程篇(阻塞队列- LinkedBlockingDeque)(持续更新迭代)
目录 一、LinkedBlockingDeque是什么 二、核心属性详解 三、核心方法详解 addFirst(E e) offerFirst(E e) putFirst(E e) removeFirst() pollFirst() takeFirst() 其他 四、总结 一、LinkedBlockingDeque是什么 首先queue是一种数据结构,一个集合中
阅读更多...
多线程篇(阻塞队列- LinkedBlockingQueue)(持续更新迭代)
目录 一、基本概要 1. 构造函数 2. 内部成员 二、非阻塞式添加元素:add、offer方法原理 offer的实现 enqueue入队操作 signalNotEmpty唤醒 删除线程(如消费者线程) 为什么要判断if (c == 0)时才去唤醒消费线程呢? 三、阻塞式添加元素:put 方法原理 图解:put线程的阻塞过程 四、非阻塞式移除:poll方法原理 dequ
阅读更多...
数字电路专题:verilog 阻塞赋值和非阻塞赋值
verilog 阻塞赋值 和 非阻塞赋值 “=”阻塞赋值, ”<=”非阻塞赋值。阻塞赋值为执行完一条赋值语句,再执行下一条,可理解为顺序执行,而且赋值是立即执行; 非阻塞赋值可理解为并行执行,不考虑顺序,在 always 块语句执行完成后,才进行赋值。 如下面的阻塞赋值: //代码如下:module top(din,a,b,c,clk);input din;input clk;out
阅读更多...
多线程篇(阻塞队列- ArrayBlockingQueue)(持续更新迭代)
目录 一、源码分析 1. 先看个关系图 2. 构造方法 3. 核心属性 4. 核心功能 入队(放入数据) 出队(取出数据) 5. 总结 一、源码分析 1. 先看个关系图 PS:先看个关系图 ArrayBlockingQueue是最典型的有界阻塞队列,其内部是用数组存储元素的, 初始化时需要指定容量大小利用 ReentrantLock 实现线程安全。 在生产者
阅读更多...
io本质+io效率本质,5种io模型(介绍,异步/同步区别,阻塞/非阻塞区别)
目录 5种io模型 io引入 io的本质 io效率的本质 模型引入 以钓鱼为例 效率最高的方式 异步io和同步io的区别 阻塞式和非阻塞式io的区别 介绍 阻塞式io 编辑 非阻塞式io 编辑 信号驱动式io 编辑 多路转接/复用 编辑 异步io 5种io模型 io引入 io的本质 以read ,write为例: 如果底层缓冲区没有数据
阅读更多...
Python线程 适合I/O处理以及涉及阻塞操作的并发执行任务,不适合计算密集型
文章目录 为什么这种情况适合 I/O 和阻塞操作?1. I/O 操作和阻塞操作的特点:I/O 操作:阻塞操作: 2. GIL 对计算密集型任务的影响:计算密集型任务:GIL 的限制: 3. I/O 和阻塞操作的优势:I/O 操作的非 CPU 密集性:多线程的并发性: 具体示例:计算密集型任务:I/O 密集型任务: 总结: 全局解释器锁(Global Interpreter Lock
阅读更多...
阻塞队列-双锁实现
我们原来单锁的话 容易 比较双锁来讲效率较低,而且size变量是线程不安全的,我们用双锁来进行优化 队列接口 public interface BlockingQueue <E>{void offer(E e) throws InterruptedException;Boolean offer(E e,long timeout) throws InterruptedException;E
阅读更多...
【多线程】阻塞,忙等待,睡眠,挂起的简单理解,以及各自优缺点
阻塞(Blocking) 理解:当一个线程或进程执行阻塞操作时,它会暂停执行,直到某个条件满足(例如,I/O操作完成、资源可用等)。在此期间,该线程或进程不会占用CPU资源。 优点: 减少CPU资源浪费,因为阻塞的线程或进程不会占用CPU时间片。简化编程模型,因为不需要处理复杂的轮询逻辑。 缺点: 增加了响应时间,因为线程或进程在条件满足之前无法继续执行。可能导致线程或进程调度延迟,特别
阅读更多...
消费者生产者模式(2)——用java阻塞队列实现
生产者——消费者模式有三个阶段的编程: 1.使用synchronized,wait,notify(这在我博客中已经有实现了,可以找找看看) 2.使用阻塞队列LinkedBlockingQueue(这是本小节的重点) 3.使用非阻塞式的内存结构如ConcurrentLinkedQueue(以后补充) 本小节所讨论的生产者消费者模式是通过一个容器来
阅读更多...
多线程IO阻塞中断
关于Java多线程IO阻塞如何中断的问题,基于一个基本条件,关闭任务发生阻塞的底层资源问题,可以中断该多线程任务。对于IO阻塞问题,给出了两个示例,一个是Socket IO,关闭掉Socket IO之后确实可以中断;另一种是System.in ,这种情况下关闭System.in,仍然不能使线程任务发生中断。测试代码如下(这种情况下,只能使用nio才可以): /*** Created by Son
阅读更多...
【编程底层思考】线程阻塞时一定会释放cpu吗
线程阻塞时是否释放CPU取决于阻塞的原因和操作系统的行为。以下是一些具体情况: 1. 阻塞等待资源:当线程因为等待某个资源(如锁、信号量、条件变量等)而阻塞时,它通常会释放CPU,以便其他线程可以运行。在这种情况下,阻塞的线程不会占用CPU资源,直到它等待的资源变得可用。 2. 阻塞等待I/O操作:当线程因为等待I/O操作(如读取文件、网络通信等)而阻塞时,它也会释放CPU。操作系统会将线程挂
阅读更多...
Linux网络编程(阻塞和非阻塞)
文章目录 一、阻塞和非阻塞的概念以及函数实现阻塞与非阻塞的概念阻塞模式(Blocking Mode)非阻塞模式(Non-Blocking Mode) 函数实现阻塞模式示例非阻塞模式实现 代码说明:阻塞与非阻塞的选择 二、#include <errno.h>头文件`<errno.h>` 的主要内容使用 `<errno.h>` 的示例总结 一、阻塞和非阻塞的概念以及函数实现
阅读更多...
阻塞队列ArrayBlockingQueue与LinkedBlockingQueue
文章目录 前言BlockingQueueBlockingQueue 接口特点应用场景 ArrayBlockingQueue特点主要方法插入元素:移除元素:其他方法: 代码示例 LinkedBlockingQueue特点主要方法插入元素:移除元素:检查元素: 代码示例 ArrayBlockingQueue 与LinkedBlockingQueue 区别 前言 在研究线程池时,发
阅读更多...
Python 中用线程执行阻塞式 I/O,不做并行计算
Python 中用线程执行阻塞式 I/O,不做并行计算 尽管 Python 也支持多线程,但这些线程受 GIL(global interpreter lock,全局解释器锁) 约束,所以每次或许只能有一条线程向前推进,而无法实现多头并进。既然有这么多限制,那 Python 还支持多线程干什么? 首先,这种机制让我们很容易就能实现出一种效果,也就是令人感觉程序似乎能在同一时间做许多件事。这样的效
阅读更多...
【SpringCloud应用框架】GateWay异步非阻塞模型
Spring Cloud Alibaba 之 GateWay工作流程+GateWay搭建 文章目录 一、GateWay工作流程工作流程的核心点总结 二、GateWay搭建 一、GateWay工作流程 流程图如下: 核心概念: 客户端向 Spring Cloud Gateway 发出请求。如果Gateway Handler Mapping确定请求与路由匹配,则将其发送
阅读更多...
【日常记录-Linux】不阻塞当前进程的情况下执行Shell脚本
Author:赵志乾Date:2024-08-29Declaration:All Right Reserved!!! 1. 简介 在不阻塞当前进程的情况下执行shell脚本,可以使用后台运行或者并发执行的方法,这些方法允许脚本在后台运行,而主进程可以继续执行其他任务。 2. 方法说明 2.1 使用&在后台运行脚本 在Shell命令末尾添加&符号可以
阅读更多...
python并发与并行(二) ———— 用线程执行阻塞式IO,但不要用它做并行计算
Python语言的标准实现叫作CPython,它分两步来运行Python程序。首先解析源代码文本,并将其编译成字节码(bytecode)。字节码是一种底层代码,可以把程序表示成8位的指令(从Python 3.6开始,这种底层代码实际上已经变成16位了,所以应该叫作wordcode才对,但基本原理依然相同)。然后,CPython采用基于栈的解释器来运行字节码。这种字节码解释器在执行Python程序的
阅读更多...
非阻塞轮询
目录 前言1.options 参数2. 非阻塞轮询3. 模拟非阻塞轮询4. 非阻塞轮询 + 执行其它任务 前言 继上一篇文章 详谈进程等待 讲到 waitpid 系统调用,在该系统调用接口中还有一个 options 参数,本篇文章介绍 watipid 系统调用中的options 参数 以及 什么是非阻塞轮询,非阻塞轮询的同时是如何执行其它任务的。 1.options 参数 p
阅读更多...
Java程序员从笨鸟到菜鸟(四十三)NIO 非阻塞实现高并发
一、阻塞和非阻塞 阻塞:应用程序在获取网络数据的时候,如果网络传输很慢,就会一直等待直到传输完毕为止 非阻塞:应用程序可以直接获取已经准备就序好的数据,无需等待 二、BIO、NIO、AIO BIO(同步阻塞式 IO):服务器实现模式为一个请求一个线程,客户端有连接请求是服务器就需要启动一个线程进行处理,如果这个连接不做任何事情就造成不必要的开销 NIO(同步非阻塞式IO):服务器实现模式
阅读更多...
okhttp异步请求连接阻塞问题排查
表现: 使用okhttp请求外部大模型接口时,当并发在2-5左右,出现请求被阻塞在建立http连接之前,阻塞时间超长(>20s,从日志看有160s存在)。但是httpconfig的connTimeout时间配置为100s,可以证明http请求被阻塞在建立连接之前,160s并非都是建立连接时间 由于是流式接口,使用okhttp-sse框架进行http长连接建立。 域名表现: 且对不同域名htt
阅读更多...
【Linux】理解操作系统中的进程状态:阻塞、挂起、运行
理解操作系统中的进程状态:阻塞、挂起、运行1. 进程状态概述2. 阻塞(Blocked)3. 挂起(Suspended)4. 运行(Running)5. 状态转换关系6. 总结 理解操作系统中的进程状态:阻塞、挂起、运行 操作系统是管理计算机硬件和软件资源的核心部分,而进程管理则是操作系统中最重要的功能之一。在处理多任务时,操作系统需要通过不同的进程状态来协调进程的执
阅读更多...
真正的 Tornado 异步非阻塞
原文出处https://hexiangyu.me/posts/15 其中 Tornado 的定义是 Web 框架和异步网络库,其中他具备有异步非阻塞能力,能解决他两个框架请求阻塞的问题,在需要并发能力时候就应该使用 Tornado。 但是在实际使用过程中很容易把 Tornado 使用成异步阻塞框架,这样对比其他两大框架没有任何优势而言,本文就如何实现真正的异步非阻塞记录。 以下使用的 Py
阅读更多...
Linux内核定时器、阻塞_非阻塞IO
一.内核时间管理 Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率(tick rate)(有的资料也叫系统频率),比如 1000Hz,100Hz 等等说的就是系统节拍率。系统节拍率是
阅读更多...
12、深入解析阻塞队列BlockingQueue
深入解析阻塞队列BlockingQueue 阻塞队列介绍队列Queue接口阻塞队列应用场景 JUC包下的阻塞队列 ArrayBlockingQueueArrayBlockingQueue使用ArrayBlockingQueue的原理数据结构入队put方法为什么ArrayBlockingQueue对数组操作要设计成双指针?出队take方法 LinkedBlockingQueueLinkedB
阅读更多...