关于java之socket输入流输出流可否放在不同的线程里进行处理
2014年2月20日到叫(黑土)(人士)的公司去面试,一家新成立的公司。刚去公司是他们新聘请的猎头A来面试我的,A面试完之后是一个号称X总的年轻人来面试我,初一见此人有点邋遢,穿着西装。
X:"你以前有做过地图?"(我简历上有写)
我:"是的,在地图上做过增值"
X:"你以前也做过socket,那你socket怎么样?"
我:"还行"
X:"如果100w的数据怎么发送?"
当时我被他这么一问,问闷了。
我也没多想就回答:"100w的话做长连接吧"
X:"长连接很耗电?"
我:"如果是PC或者服务器,这个电不在计算的范围内?"
X:"是发送到手机上的。"
接着我也没下文了,闷了。
面试完了,然后回公司的路上我在想:"对呀,服务器怎么发起到手机端的socket"
郁闷中。。。。
平常我自己写的原生socket(不是nio),一个socket的input和output都是在同一个线程中。即同步式的,先读再写或者先写再读(有先后顺序,没办法随时写或者随时读)。
不过在回公司的路上之后我也在想,这个原生socket能不能把inputstream和outputstream分别放在不同的线程上面,同时有一个线程进行把数据一直放到写队列中。
但是一旦read线程启动,write线程就被block了(即read被block时write也被block了)。所以同一个socket的input和output只能是放在同一个线程中进行过程式(同步式的,read之后再write,或者write之后再read)
关于java之socket输入流输出流可否放在不同的线程里进行处理的更多相关文章
- Java之所有输入流输出流的分类
(1)字节输入流 基类:InputStream FileInputStream.ByteArrayInputStream.PipedInputStream.Buffered ...
- java基于socket的网络通信,实现一个服务端多个客户端的群聊,传输文件功能,界面使用Swing
最近在复习java的io流及网络编程.但复习写那些样板程序总是乏味的.便准备写个项目来巩固.想来想去还是聊天项目比较好玩.如果日后完成的比较好自己也可以用(哈哈哈).并且自己后面也要继续巩固java多 ...
- 【JAVA】Socket 编程
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...
- java基于socket公共聊天室的实现
项目:一个公共聊天室功能的实现,实现了登录聊天,保存聊天记录等功能. 一.实现代码 1.客户端 ChatClient.java import java.io.BufferedReader; impor ...
- JAVA之Socket编程
网上对Socket的诠释很多,也很全,在这里我就不多说了,总之,现在的网络处处都在使用Socket.本帖是一个Socket的例子,用来模拟一个简单的登录系统,只有核心代码,访问数据库.输入神马的统统没 ...
- 简单通过java的socket&serversocket以及多线程技术实现多客户端的数据的传输,并将数据写入hbase中
业务需求说明,由于公司数据中心处于刚开始部署的阶段,这需要涉及其它部分将数据全部汇总到数据中心,这实现的方式是同上传json文件,通过采用socket&serversocket实现传输. 其中 ...
- 【转】java的socket编程
转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台 ...
- 基于java的socket编程
#开头的废话#学习java已经半个月了,原本在抠教材里面的字眼时,觉得教材好厚,要看完不知道要到猴年马月去了.突然在网上看到一个教程,里面老师说学编程语言书不用太细看,看个大概,知道里面讲些什么就好, ...
- Java NIO Socket 非阻塞通信
相对于非阻塞通信的复杂性,通常客户端并不需要使用非阻塞通信以提高性能,故这里只有服务端使用非阻塞通信方式实现 客户端: package com.test.client; import java.io. ...
随机推荐
- 使用自定义的按钮替换默认的<input type='file'>
可以通过让默认的input type = 'file'按钮透明度变为0,并且让它刚好覆盖在自定义的按钮上,来实现此效果: 将它写成一个jQuery插件: (function($){ $.fn.brow ...
- Django内置过滤器详解附代码附效果图--附全部内置过滤器帮助文档
前言 基本环境 Django版本:1.11.8 Python版本:3.6 OS: win10 x64 本文摘要 提供了常用的Django内置过滤器的详细介绍,包括过滤器的功能.语法.代码和效果示例. ...
- vue2.0 代码功能片段
1.代码片段截取 checkAll: function(flag){ this.checkAllFlag = flag; this.productList.forEach(function(value ...
- uboot的lds文件分析
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") ...
- pku oj overhang叠加卡片求最少的卡片数
这个估计是里面第二简单的了,因为第一简单的是求a+b 哈哈,一submit就ac了 题目如下: Description How far can you make a stack of cards ov ...
- inux内存映射和共享内存理解和区别
可以看到内存映射中需要的一个参数是int fd(文件的标识符),可见函数是通过fd将文件内容映射到一个内存空间, 我需要创建另一个映射来得到文件内容并统计或修改,这时我创建这另一个映射用的仍是mmap ...
- HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署
HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3. ...
- KafkaStream实现wordcount
KTable应用 KTable wordCounts = textLines // Split each text line, by whitespace, into words. .flatMapV ...
- 常用shell命令实战
#!/bin/sh ################### #### 环境变量 ### ################### #主程序目录 #APP_HOME=/apps/svr/apache-to ...
- sql server merge 的用法
CREATE TABLE tTable ( id INT , f1 VARCHAR(10) , f2 VARCHAR(10) , f3 VARCHAR(10) ) GO INSERT INTO tTa ...