精华内容
下载资源
问答
  • 同步/异步,堵塞/非阻塞的概念:同步/异步:被调用者是否返回消息,只与被调用者有关堵塞/非阻塞:程序在等待调用结果时的状态,只与调用者有关概念与程序的对应:同步:不返回消息,程序要么卡在那看着执行完(堵塞)...

    同步/异步,堵塞/非阻塞的概念:

    同步/异步:被调用者是否返回消息,只与被调用者有关

    堵塞/非阻塞:程序在等待调用结果时的状态,只与调用者有关


    概念与程序的对应:

    同步:不返回消息,程序要么卡在那看着执行完(堵塞),要么向下执行,不过要时不时的回去看一下执行完了没(非堵塞)

    异步:返回消息,程序当然也可以卡在那,等着接受返回的消息(堵塞),不过一般都是接着向下执行,之后只要接受消息就行(非堵塞)


    程序的实现:

    同步堵塞:等待return

    同步非堵塞:并发,用多线程实现,主线程接着向下走,子线程去执行调用;

    异步堵塞:没人干这种事,人家都说了做完会通知你的,你还傻傻的蹲在这等着

    异步非堵塞:大家都这么干,这才是正常的好嘛


    额外说一下同步非堵塞:

    虽然感觉怪怪的,因为一般调用者的后续依赖这被调者的返回值,而多线程是不依赖的;如果依赖的话,只能用同步堵塞了,不依赖的话,同步非堵塞还行;

    不过都是非堵塞,那么和异步非堵塞的区别在哪?

    还是回到最初的概念上,异步非堵塞的本质是callback,即完成后通知,而多线程的话,完成了就完成了,不通知(非要通知谁也拦不住你)


    再重点说下异步:

    为什么要用异步,而放着多线程不用?

    只是某些情况下异步好用,而非全部时间,这个情况就是处理阻塞的时候:

    手动对堵塞进行异步操作,这样主程序对于cpu来讲一直是就绪的状态;

    而如果是多线程,那么遇到堵塞,就会将主线程挂起,切换到以外一个任务


    python中有三个模块用来实现异步:asyncio、aiohttp、twisted

    还有两个关键字:async和await

    转载于:https://www.cnblogs.com/justaman/p/11479008.html

    展开全文
  • * 要做一下异常处理 原理 synchronized和wait/notify 线程堵塞锁 可阻塞队列 * @author zw * */ public class BoundedBuffer_Synchronized { private Object[] items = new Object[2]; private Object notEmpty ...
    /**
     * 要做一下异常处理  原理 synchronized和wait/notify 线程堵塞锁 可阻塞队列
     * @author zw
     *
     */
    public class BoundedBuffer_Synchronized {
    private Object[] items = new Object[2];
    private Object notEmpty = new Object();
    private Object notFull = new Object();
    int count,putidx,takeidx;
     
    //压入
    public  void put(Object obj) throws InterruptedException{
        synchronized(notFull){
            while(count == items.length){
                notFull.wait();
            }
        }
        items[putidx] = obj;
        if(++putidx == items.length){
            putidx = 0;
        }
        count ++;
        synchronized (notEmpty) {
            notEmpty.notify();
        }
    }
    public Object take() throws InterruptedException{
        synchronized(notEmpty){
            while(count == 0){  
                notEmpty.wait();
            }
        }
        Object x = items[takeidx];
        System.out.println("取第"+takeidx+"个元素"+x);
        if(++takeidx == items.length){
            takeidx = 0; 
        }
        count --;
        synchronized (notFull) {
            notFull.notify();
        }
        return x;
    }
    public static void main(String[] args) throws InterruptedException {
        final BoundedBuffer_Synchronized bb = new BoundedBuffer_Synchronized();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread()+","+bb);
                    bb.put("zw");
                    bb.put("sj");
                    bb.put("xz");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        //取一个 如果没有数据会进行等待
        bb.take();
        bb.take();
    }
    }

    展开全文
  • nodejs中的阻塞与非堵塞的区别

    千次阅读 2016-12-08 21:14:50
    这几天刚好在学习nodejs ,在今天实际操作时,想对堵塞和非堵塞的区别做个总结,废话不多说,直接上例子: 一下是我的目录结构: input.txt文件:这个文件是乱打的,随便打的 wo men shi zhe yang de hua ...

    这几天刚好在学习nodejs ,在今天实际操作时,想对堵塞和非堵塞的区别做个总结,废话不多说,直接上例子:

    一下是我的目录结构:



    input.txt文件:这个文件是乱打的,随便打的

    wo men shi zhe yang de hua ,ni hai hui ai wo ma ?

    mian.js文件堵塞:

    var http = require('http');
    var fs = require('fs');
    var server = http.createServer(function (request, response) {
    
    	// 发送 HTTP 头部 
    	// HTTP 状态值: 200 : OK
    	// 内容类型: text/plain
    	response.writeHead(200, {'Content-Type': 'text/html;charset=UTF8'});
    				var data = fs.readFileSync('D:/Documents/HBuilderProject/nodejs/js/input.txt');
    
    				console.log(data.toString());
    				console.log("程序执行结束!");
    	// 发送响应数据 "Hello World"
    	response.end('Hello World 这是我的第一个nodejs,哈哈哈\n');
    });
     server.listen(8891,'127.0.0.1');
    // 终端打印如下信息
    console.log('Server running at http://127.0.0.1:8891/');


    mian2.js文件非堵塞:

    var http = require('http');
    var fs = require('fs');
    var server = http.createServer(function (request, response) {
    
    	// 发送 HTTP 头部 
    	// HTTP 状态值: 200 : OK
    	// 内容类型: text/plain
    		//response.writeHead(200, {'Content-Type': 'text/html;charset=UTF8'});
    				var data = fs.readFile('D:/Documents/HBuilderProject/nodejs/js/input.txt', function (err, data){
    				if (err) return console.error(err);
    				console.log(data.toString());
    				
    	});
    	console.log("程序执行结束!");
    	response.end('这是测试堵塞代码实例!\n');
    });
    
    
     server.listen(8892,'127.0.0.1');
    // 终端打印如下信息
    console.log('Server running at http://127.0.0.1:8892/');

    区别一: 堵塞引用的文件fs. readFileSync与非堵塞引用的文件fs. readFile.

    区别二:第一个实例(堵塞)在文件(此指的是input.txt)读取完后才执行完程序。 第二个实例(非堵塞)我们呢不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。如下图:



    讲个通俗易懂的例子:

    非堵塞:A去餐厅吃饭,服务员拿着菜单准备给A点菜,这时B进来,服务见看到了,这时服务员叫A先看下菜单,马上去招待B坐下让B看下要点什么菜,为B点完菜后结束后,再来为A点菜。

    堵塞:必须为A服务完之后,再去服务B,大大的消耗性能


    注意点:1、此几个文件都可以直接复制到直接执行此处的端口可以自己随意定。

    ` <nodejs是单线程的>

           2、页面的访问路径如下,您可以对比以上代码,可以得出结论:



    如果大家遇到相同问题,欢迎与我交流,我的QQ:542601041,哈哈,下班!下班!

    展开全文
  • 各位大神。。...我每个链接都设置成了非阻塞模式,在TCP通讯过程中反复插拔网线,偶尔会出现SELECT任务被挂起的情况,我加了mark,在recv前的mark = recv后mark+1,然后任务被挂起。。。。请帮帮我
  • 在Windows XP PHP 5.3.5上运行Example #1 from PHP时,curl_multi_select()行将始终在指定的超时时间内阻塞(如果为空白,它将阻塞1秒钟,如果我指定5秒钟,它将阻塞5秒钟),无论获取内容所需的时间.我怀疑与this bug有关....

    在Windows XP PHP 5.3.5上运行Example #1 from PHP时,curl_multi_select()行将始终在指定的超时时间内阻塞(如果为空白,它将阻塞1秒钟,如果我指定5秒钟,它将阻塞5秒钟),无论获取内容所需的时间.我怀疑与this bug有关.

    问题是:最好的解决方法是什么?我能想到的最好的方法是摆脱curl_multi_select()和usleep(x)作为节省周期的一种方式.

    解决方法:

    只要您可以忍受1秒钟的阻塞,这可能会有所帮助.

    在manual page for curl_multi_select上有一条评论提到该阻止持续到至少一个连接完成或$timeout秒,以先到者为准.他们还写道,对curl_multi_select的调用应该被包装:

    private function full_curl_multi_exec($mh, &$still_running) {

    do {

    $rv = curl_multi_exec($mh, $still_running);

    } while ($rv == CURLM_CALL_MULTI_PERFORM);

    return $rv;

    }

    然后修改检查运行句柄的循环:

    // execute the handles

    $still_running = null;

    $this->full_curl_multi_exec($mh, $still_running);

    // check whether the handles have finished

    do { // "wait for completion"-loop

    curl_multi_select($mh); // non-busy (!) wait for state change

    $this->full_curl_multi_exec($mh, $still_running); // get new state

    while ($info = curl_multi_info_read($mh)) {

    // process completed request (e.g. curl_multi_getcontent($info['handle']))

    }

    } while ($still_running);

    在进行此修改之前,由于this bug in PHP 5.3.18,使用PHP 5.4测试的代码无法在运行PHP 5.3.20的Amazon实例上运行,这导致对curl_multi_select()的调用永远不会返回-1

    现在,我可以使用200个句柄在不到30秒的时间内从近1300个URL中检索数据.

    标签:curl,curl-multi,php

    来源: https://codeday.me/bug/20191201/2080253.html

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼session1;create table t_all_objs as select owner,object_id,object_name from all_objects where 0=1;alter table T_ALL_OBJS add constraint pk_t_all_objs primary...
  • linux下 IO 阻塞阻塞

    2019-09-24 17:54:10
    1.区分堵塞、非堵塞 在一个IO操作过程中,以read为例,会涉及到两个过程: ...进程在步骤1不堵塞,如果数据没准备好,read(io操作)函数会立即返回一个状态值反馈给进程,所以对于非阻塞io,可以用一...
  • 这四个概念两两组合,会形成四个新的概念,如下:1、同步阻塞 :客户端发送请求到服务端,此时服务端处理任务时间很长,则客户端被服务端堵塞了,所以客户端会一直等待服务端的相应,此时客户端不能做任何事情,...
  • Verilog 阻塞

    2018-06-14 11:29:10
    Verilog 阻塞Verilog 阻塞Verilog 阻塞Verilog 阻塞 Verilog 阻塞Verilog 阻塞Verilog 阻塞Verilog 阻塞
  • 1 查看阻塞根源线程的堆栈 2 ~95s 3 !clrstack
  • 同步异步阻塞阻塞

    2015-04-29 10:12:22
    同步异步阻塞阻塞
  • 阻塞赋值与阻塞赋值

    万次阅读 多人点赞 2019-06-17 16:13:11
    Verilog语言中最容易被误解的构造之一是非阻塞赋值。 即使是非常有经验的Verilog设计人员也不能完全理解在IEEE兼容的Verilog模拟器中如何安排非阻塞分配,并且不了解应该何时以及为何应该使用非阻塞赋值。 本文详细...
  • 阻塞和非阻塞 # 阻塞和非阻塞关注的是程序在等待调用结果时的状态 # 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才返回 # 非阻塞调用是指在不能立即得到结果之前,该调用不会阻塞...
  • 堵塞和非堵塞 | 同步与异步 故事:老王烧开水。 出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。 有好几种等待方式: 1.老王用水壶煮水,并且站在那里,不管水开没开,盯着水壶看水开了...
  • Qtimer 阻塞阻塞

    2021-05-11 17:26:00
    阻塞 QTimer::singleShot(5000, this, = { qDebug()<< “AAA” ; } ); 阻塞: QThread::sleep(5); 阻塞(网上有说非阻塞,然而跟实验结果不一致??)
  • 同步阻塞:客户揣发送请求给服务揣,此时服务端处理任务时间很久,则客户端则被服务端堵塞了,所以客户端会一直等待服务端的响应,此时客户端不能做其他任何事,服务端也不接受其他客户揣的请求。这种通信机制比较...
  • 简单理解什么是同步阻塞/同步非阻塞,异步阻塞/异步非阻塞 举个栗子 1、你在家做饭,用普通的汤锅,米放进去,就站在锅边,傻等饭熟。——这叫同步阻塞 是不是觉得浪费了大量的时间,于是你想提高时间的利用效率。 2...
  • 同步阻塞:你把衣服都到洗衣机洗,然后看着洗衣机洗碗,洗好后再去晾衣服(你就干等,啥都不做,堵塞在那) 但你要的结果只是晾衣服,你等待的这个过程就是阻塞 同步非阻塞:你把衣服丢到洗衣机洗,然后可以去做其它...
  • 阻塞、非阻塞IO

    千次阅读 2017-11-14 20:06:22
    阻塞与非阻塞是对于文件而言的,而不是指read、write等的属性。 阻塞IO 应用程序调用IO函数,导致应用程序阻塞,等待数据准备好。如果数据没有准备好,一直等待数据准备好了,从内核拷贝到用户空间,IO函数返回...
  • tcp socket同步 异步 阻塞阻塞 的解释.zip 基本概念:同步、异步、阻塞和非阻塞的区别 同步异步与阻塞阻塞的区别 C++ 同步异步与阻塞阻塞的区别
  • SOCKET中阻塞和非阻塞的区别

    千次阅读 2018-07-09 18:52:16
    阻塞模式可以理解为,执行此套接字的网络调用时,不管是否执行成功,都会立即返回。如调用recv( )函数读取网络缓冲区中的数据时,不管是否...而阻塞模式为只有接收到数据后才会返回,套接字默认的会创建堵塞模式。...
  • MPI标准阻塞通信模式和非阻塞式通信模式
  • socket阻塞和非阻塞

    万次阅读 多人点赞 2018-09-27 20:45:22
    一、socket阻塞和非阻塞有哪些不同 1. 建立连接 阻塞方式下,connect首先发送SYN请求到服务器,当客户端收到服务器返回的SYN的确认时,则connect返回,否则的话一直阻塞。 非阻塞方式,connect将启用TCP协议的三...
  • 很多时候我们常常看到同步与异步,阻塞与非阻塞的出现。有的地方直接将同步与阻塞画上了等号。异步与非阻塞画上了等号。事实上这是不对的。同步不等于阻塞,而异步也不等于非阻塞。下面就来仔细的看看同步与异步、...
  • 堵塞

    2014-06-25 15:07:44
    apue说到非堵塞要分析两种系统调用,低速的系统调用和其它的系统调用。那么低速的系统调用可能是进程堵塞。例如对不存在的数据进行读操作,可能是调用者永远阻塞,因为他得等读到了数据才返回;如果某个文件描述符...
  • 堵塞和非堵塞的read函数+write函数read函数read函数阻塞(Block)非堵塞 read函数 调用read函数从打开文件中读数据。 #include<unistd.h> ssize_t read(int filedes,void *buf,size_t nbytes); 返回值:若...
  • 主要介绍了php多进程中的阻塞与非阻塞操作,结合实例形式分析了php多进程中的阻塞与非阻塞原理、阻塞控制方法与相关操作技巧,需要的朋友可以参考下
  • 网络编程堵塞函数

    2020-09-06 12:33:25
    堵塞函数 缺省情况下,套接字建立后所处于的模式就是阻塞I/O 模式 读操作中的read、recv、recvfrom 写操作中的write、send 其他操作:accept、connect sendto 函数不堵塞 UDP不用等待确认,没有实际的发送缓冲区...
  • 第 PAGE 页码 页码 页 / 总页数 NUMPAGES 总页数 总页数 页 操作系统阻塞和非阻塞区别 学习操作系统的朋友们肯定有学到阻塞和同步具体知识是怎么应用呢下面由我为大家整理了操作系统的同步的相关知识希望对大家有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,037,575
精华内容 415,030
关键字:

阻塞