后来网上查阅TCP的协议,发现应该是TCP的握手信号导致这个问题,TCP是传输控制协议,协议内会保证数据的正确性,所以每次的数据发送都会等待接收端的ACK。
而被动退出(拔掉网线),接收端根本没有回复,server端就会反复发送之前没有ACK 的数据,导致write阻塞。...
分类:
其他好文 时间:
2014-10-23 00:04:14
阅读次数:
259
在linux内核中进程的状态主要有几种状态:1.运行态:即进程正在CPU上进行运行,它此刻正在占有CPU;2.就绪态:即进程除了CPU之外,已经具备了运行的所有条件,在就绪队列中等待调度器(schedule)的调度;3.阻塞态:即进程除了缺少CPU外,还缺少其他条件,在等待队列中等待所需要..
分类:
系统相关 时间:
2014-10-22 16:02:33
阅读次数:
416
http://blog.csdn.net/wishfly/article/details/3726985你在主线程用了WaitForSingleObject,导致了消息循环的阻塞,界面假死。然后在线程中调用了SetDlgItemText,而SetDlgItemText实际上调用的是SendMessa...
分类:
编程语言 时间:
2014-10-22 06:21:35
阅读次数:
292
一段式:将整个状态机写到1个always模块里,在该模块中既描述状态转移,又描述状态的输入和输出。(always用时序逻辑也就非阻塞赋值)解释:无须解释特点:一段式描述方法不符合将时序和组合逻辑分开描述的Coding Style(代码风格),而且代码冗长、不清晰,不利于附加约束,不利于综合器和布局布...
分类:
其他好文 时间:
2014-10-21 19:11:23
阅读次数:
202
背景:
需要在项目的测试工具中添加一个按钮,点击后直接打开某exe工具。
这个工具的功能是导入txt文件,转为excel报表输出。
无奈解析了两行之后就停止不动了,也不报错。关闭测试工具后,就很顺畅的继续运行。
原因:
txt转excel报表过程中,中间信息是存在内存中的,缓存区的空间被占满后,程序就被阻塞了,一直在等待缓存区空间资源的释放,所以需要建立线程及时清空缓存区。
解决办...
分类:
编程语言 时间:
2014-10-21 17:50:14
阅读次数:
161
伪异步IO实在阻塞IO的基础上将每一个客户端发送过来的请求由新创建的线程来处理改进为用线程池来处理,因此避免了为每一个客户端请求创建一个新线程造成的资源耗尽问题。
来看一下伪异步IO的服务端代码:
线程池类
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executor...
分类:
其他好文 时间:
2014-10-21 15:31:17
阅读次数:
221
一 消息队列的介绍消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。◆影...
分类:
系统相关 时间:
2014-10-21 12:00:18
阅读次数:
262
同步服务端
同步服务端也相当简单。它需要两个线程,一个负责接收新的客户端,另外一个负责处理已经存在的客户端。它不能使用单线程;等带一个新的客户端是一个阻塞操作,所以我们需要另外一个线程来处理已经存在的客户端。...
分类:
编程语言 时间:
2014-10-21 10:22:06
阅读次数:
324
一般阻塞IO通信的服务端,通常有一个独立的Acceptor线程负责监听客户端连接,它接收到客户端连接请求之后为每一个客户端分配一个新的线程来进行处理,处理完成后,通过输出流返回应答给客户端,线程才销毁。
来看一下阻塞IO服务器的代码:
服务器启动类
package com.bio.demo.Server;
import java.io.IOExcepti...
分类:
其他好文 时间:
2014-10-20 21:29:30
阅读次数:
204
Python threading模块提供了Event对象用于线程间通信,它提供了设置、清除、等待等方法用于实现线程间的通信。event是最简单的进程间通信方式之一,一个线程产生一个信号,另一个线程则等待该信号。Python 通过threading.Event()产生一个event对象,event对象维护一个内部标志(标志初始值为False),通过set()将其置为True,wait(timeout)则用于阻塞线程直至Flag被set(或者超时,可选的),isSet()用于查询标志位是否为True,Clear...
分类:
编程语言 时间:
2014-10-20 19:36:11
阅读次数:
177