`
maskface
  • 浏览: 5416 次
社区版块
存档分类
最新评论

[我被自己坑出翔]socketRead0 Block进程

    博客分类:
  • java
阅读更多
    事实证明,我的确是一个挖坑好手!挖得一手好坑,坑得一手好人!可惜每每别人没坑着,总是坑了自己。灰头土脸之余,来回首一下今天这个陨石洞!
    小弟最近在用java Socket开发一个通信传输小应用,在满怀激情挥洒汗水一阵乱码之后,很不幸果然不出小弟所料,这个应用不work啊。不仅该传的东西没传,Server上处理本次通信的线程还被Block住了。事已至此啥也不说了,赶紧撸起袖管子~看Dump呗。一看Dump,线程被block在一个叫socketRead0的方法上~啥?socketRead0,?谁TM命名这么不规范!定睛一瞧,这是一个native方法,我伙呆~小弟这个navie小弱码渣居然在有生之年能被native方法坑到,坑得值啊!想到这里,小弟心里不禁油油然起来鸟!
    那到底为啥子小弟会被这个native方法block到呢~经过认真仔细的考证学习,是因为socketWrite0方法会把数据写到Tcp buffer里等着对方来读,如果这个buffer被写满了,却没有被读,这样的话socketWrite0就闷声block线程(如果你设置了一个非常长的timeout)~
    于是乎,真相只有一个!就是小弟的程序里必然有一个地方把这个buffer写满了没有被读啊!果不其然,原因就是这样,至于小弟在程序里的什么地方,用什么方式坑到了自己,就不细说了,人艰不拆啊!!!

    PS.这个错误还常见于log4j的SocketAppender上~大家要小心呦,不要因为一句log就block了整个线程呦
分享到:
评论

相关推荐

    设计一个有 N个进程共行的进程调度程序

    进程还需要运行时间ALLTIME,进程运行完毕ALLTIME=0, 已用CPU时间----CPUTIME、 进程的阻塞时间STARTBLOCK-表示当进程在运行STARTBLOCK个时间片后,进程将进入阻塞状态 进程的阻塞时间BLOCKTIME--表示当进程阻塞...

    进程调度算法模拟程序设计

     进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。  进程状态STATE。  队列指针NEXT,用来将PCB排成队列。 (3)优先数改变的原则:  进程在就绪队列中呆一个...

    使用动态优先权的进程调度算法的模拟

    •••• 进程被阻塞的时间BLOCKTIME,表示已足赛的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。 •••• 进程状态START。 •••• 队列指针NEXT,用来将PCB排成队列。 (3)优先数改变的原则: •••进程...

    进程调度算法模拟

    进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。 进程状态STATE。 队列指针NEXT,用来将PCB排成队列。 优先数改变的原则: 进程在就绪队列中呆一个时间片,优先数加1。...

    进程创建和杀死

    进程控制块(Process Control Block,PCB)是操作系统用来管理进程的数据结构。它包含了进程的所有信息,如进程标识符、进程状态、优先级、内存地址等。PCB 是进程的唯一标识符,它是操作系统管理进程的关键。 3. ...

    计算机操作系统进程调度算法模拟

     进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。  进程状态STATE。  队列指针NEXT,用来将PCB排成队列。 (3)优先数改变的原则:  进程在就绪队列中呆一个...

    Linux那些事儿之我是Block层

    从内核版本 2.6.15 开始,内核源代码的顶级目录下增加了一个名为“block”的子目录,这标志着 Block 层被正式引入到了 Linux 内核的核心架构中。 在 2.6.22.1 版本的内核中,我们可以通过以下命令查看 block 目录的...

    pl/0关于主程序block的分析

    pl/0中block的分析,有流程图和代码注释等。学生答辩必备

    实验一、进程调度,设计一个有 N个进程共行的进程调度程序

    每个进程都由一个进程控制块(Process Control Block,简称PCB)来表示。PCB中包含了多个字段用于记录进程的关键信息,包括但不限于: - 进程名 - 优先数 - 到达时间 - 需要运行时间 - 已用CPU时间 - 进程状态 其中...

    进程调度算法模拟程序设计C++.docx

    该算法的主要思想是,每个进程都被赋予一个优先级,优先级越高的进程将被优先执行。同时,我们还将使用时间片轮转法来分配系统资源。 变量说明 在实验代码中,我们定义了以下变量: * `ALLTIME`:每个进程的总...

    进程调度程序模拟 进程调度程序模拟 进程调度程序模拟

    例如,若进程到达时间为31、2、1、0、43、4、16、42、12、8,第一个到达的进程3(执行时间为25)会被首先执行,然后在25之前寻找下一个最短的进程。 实验的设计涉及到了以下数据结构和编程技术: - **PCB(Process...

    进程优先度算法

    6. **进程被阻塞的时间 BLOCKTIME**:对于已经处于阻塞状态的进程,该字段记录了它还需要等待多少个时间片才能重新变为就绪状态。 7. **进程状态 STATE**:当前进程的状态,可以是 R(就绪)、E(运行)、B(阻塞)...

    简单的c语言模拟进程管理实验

    例如,采用先进先出(FIFO)策略时,进程通常被添加到队列的末尾。在C语言中,可以使用结构体指针来实现链表的插入操作。 实现进程在队列之间的转换涉及到状态改变。例如,当进程执行完毕,需要将其从运行队列移除...

    操作系统进程控制实验代码(c语言)

    2. **进程控制块(PCB,Process Control Block)**:PCB是操作系统用来记录和控制进程状态的重要数据结构。它存储了关于进程的各种信息,如进程名、进程优先级、轮转时间片、CPU使用时间、进程状态和当前队列指针等...

    PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程所占用的CPU时间,进程的状态,当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删。

    在操作系统中,PCB(Process Control Block,进程控制块)是系统用来管理和调度进程的核心数据结构。PCB包含了描述进程状态和控制进程执行的所有必要信息,它相当于进程在内存中的身份证,记录了进程的基本属性和...

    block回调测试

    在iOS编程中,Block常被用作回调,这是因为Block可以直接访问和修改其定义时的作用域内的变量,这使得异步操作的结果可以方便地回传到调用者。例如,网络请求、定时器、动画等操作,都可以通过Block来实现回调。 三...

    SAP方丈-Coding Block详解x.doc

    1. 选择屏幕:在SAP程序中,选择屏幕允许用户输入参数,这些参数随后在Coding Block中被用于筛选或过滤数据。通过定义选择屏幕事件,如INITIAL SCREEN和AFTER OUTPUT,可以实现与用户交互的功能。 2. 表处理:在...

Global site tag (gtag.js) - Google Analytics