V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Aruforce  ›  全部回复第 7 页 / 共 19 页
回复总数  375
1 ... 3  4  5  6  7  8  9  10  11  12 ... 19  
2020-06-11 17:36:39 +08:00
回复了 MarcusHo 创建的主题 NGINX nginx 反向代理报 js 错误
你这是 Js 的问题啊重新编译部署吧
2020-06-08 09:43:35 +08:00
回复了 Aruforce 创建的主题 程序员 NIO 如下代码怎么绕过死锁?还是说我写的不对?如下代码
@arloor
0. Wrapper 这条路 实在没走通;
1. 遵从你的建议...serverSocketChannelSelector 不要直接给了放缓存对队列...socketChannelSelector 自己来拿吧...
3. 但是 socketChannelSelector 有空转的问题而且如果 blockingDeque 缓存的比较多的话...感觉有问题

```
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.LinkedBlockingDeque;

public class NIO2 {
private static volatile boolean keepRunning = true;
private static LinkedBlockingDeque<SocketChannel> blockingDeque = new LinkedBlockingDeque<SocketChannel>();
public static void main(String[] args) throws Exception {
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
serverSocketChannel.bind(new InetSocketAddress(8090), 128);
Selector selector = Selector.open();
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
Selector socketChannelSelector = Selector.open();
new Thread(new Runnable() {
@Override
public void run() {
try {
while (keepRunning) {
int select = selector.select();
if (select > 0) {
Set<SelectionKey> selectedKeys = selector.selectedKeys();
Iterator<SelectionKey> iterator = selectedKeys.iterator();
while (iterator.hasNext()) {
SelectionKey next = iterator.next();
if (next.isValid()) {
if (next.isAcceptable()) {
SocketChannel accept = ((ServerSocketChannel) next.channel()).accept();
accept.configureBlocking(false);
blockingDeque.add(accept);
}
} else {
socketChannelSelector.keys().remove(next);
}
iterator.remove();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
while (keepRunning) {
if (!blockingDeque.isEmpty()) {
blockingDeque.removeIf(value->{
try {
value.register(socketChannelSelector,SelectionKey.OP_READ|SelectionKey.OP_WRITE);
} catch (ClosedChannelException e) {
e.printStackTrace();
return false;
}
return true;
});
}
// 又是在空转。。。
int select = socketChannelSelector.select(1);
if (select > 0) {
Set<SelectionKey> selectedKeys = socketChannelSelector.selectedKeys();
Iterator<SelectionKey> iterator = selectedKeys.iterator();
while (iterator.hasNext()) {
SelectionKey next = iterator.next();
if (next.isReadable()) {

} else if (next.isWritable()) {
ByteBuffer byteBuffe = ByteBuffer.allocate(4);
int l = (int) (System.currentTimeMillis() / 1000L + 2208988800L);
byteBuffe.put(fromInt(l));
byteBuffe.flip();
((SocketChannel) next.channel()).write(byteBuffe);
((SocketChannel) next.channel()).close();
}
iterator.remove();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();

}

public static byte[] fromInt(int i) {
byte[] result = new byte[4];
result[3] = (byte) (i);
result[2] = (byte) (i >> 8);
result[1] = (byte) (i >> 16);
result[0] = (byte) (i >> 24);
return result;
}

public static int fromByteArray(byte[] bytes) {
if (bytes.length != 4) {
throw new IllegalArgumentException("bytes array length = " + bytes.length);
}
//
int a = bytes[3] & 0x000000ff;
a |= (bytes[2] << 8) & 0x0000ffff;
a |= (bytes[1] << 16) & 0x00ffffff;
a |= (bytes[0] << 24) & 0xFFffffff;
return a;
}
}
```
2020-06-05 13:13:40 +08:00
回复了 Aruforce 创建的主题 程序员 NIO 如下代码怎么绕过死锁?还是说我写的不对?如下代码
@MoHen9 主 ServerSocketChannel accept 的 socketChannel 向 从 selector registe 的时候会碰到 锁竞争。。。 我不知道怎么绕过去 从 selector.wakeup() 并不好用 能注册上是运气好 CPU 先执行了主 Selector 的线程...还有像一部份没办法注册上的。。。
从 selector.select(1) 这样 其实也不对...如果主 selector accept 的 keyset 很大的话 就走不下去了
2020-06-05 13:07:35 +08:00
回复了 Aruforce 创建的主题 程序员 NIO 如下代码怎么绕过死锁?还是说我写的不对?如下代码
@arloor socketchannelSelector 不需要处理 accept 啊... serverSocketChannel 不需要处理 read write 。。。

你说的 reator 模式 ( 1 个线程循环处理 selector.selectedKeys 处理好 accept 及 registe 并且将 read/write dispatch 给线程池来处理)

我是想把 所有的 socketchannel 的 read/write 交给另一个 selector... 但是碰到了死锁。。。想写个 Wrapper 但是没写出来
2020-06-04 21:22:11 +08:00
回复了 Aruforce 创建的主题 程序员 NIO 如下代码怎么绕过死锁?还是说我写的不对?如下代码
@badteeth 正常情况应该是一个端口一个 selector…单线程负责当前端口的全部的建连接及 socketchannel 的 registe……还有个线程池负责真正的读写数据和处理业务逻辑… 我想问的是怎么绕过去…selector.wakeup 不好使…
2020-06-04 21:17:48 +08:00
回复了 Aruforce 创建的主题 程序员 NIO 如下代码怎么绕过死锁?还是说我写的不对?如下代码
@badteeth ……我是想一个 selector 负责 serversocketchannel 建连接…一个 selector 负责 socketchannel 读写状态…但是同一个 selector select 和 registe 是不能并行的 都要滚去 selector publishkey 的锁……会死锁……我绕不过去了……
2020-06-04 18:50:20 +08:00
回复了 Aruforce 创建的主题 程序员 NIO 如下代码怎么绕过死锁?还是说我写的不对?如下代码
select 和 registe 都要获取 Selector publicKeys 的锁....
是不是不该这么用啊...
2020-06-02 13:37:03 +08:00
回复了 CRH 创建的主题 程序员 一个简单的灰度发布思路,求指正
目标这个应该改成存在的问题吧...

想做到数据安全升级的话,就不能略过,需要完成老 APP 在新 API 下的兼容测试;
略过之后如果存在兼容 bug 那肯定存在数据错误需要修复;

你这种操作是啥?拿一部分用户献祭?脏数据修复搞死你。。。
而且不同代码使用同一套数据环境。。。确认表结构是兼容的?
2020-05-11 13:03:36 +08:00
回复了 yjxjn 创建的主题 问与答 对于 SSM 框架的项目来说, V2EXer 是怎么处理异常的呢?
直接往外抛……dispatcherservlet 初始化的时候会从上下文里过去 HandlerExceptionResolver 接口的的实现来统一处理异常……你可以看下这个接口
2020-05-08 08:15:36 +08:00
回复了 kaiki 创建的主题 问与答 无需注册的网站系统如何给用户进行限制领号
网卡地址?一般没人会整个改网卡的操作吧………
2020-05-07 19:05:40 +08:00
回复了 xhf1024 创建的主题 Java 大家来探讨一下 Java 方法执行问题!
看你的意思是在第一次任务执行后,由一个线程 batch 执行在第一次任务执行间提交的批量任务?

如果是这样的话,无法做到,因为一个线程在任意时刻执行一个方法…

如果理解错误的话,当我没说……
2020-05-04 10:08:07 +08:00
回复了 clockOS 创建的主题 互联网 互联网讽刺小短剧,你能听出几个梗
有完没完了?
2020-04-20 19:21:47 +08:00
回复了 saytesnake 创建的主题 NGINX Nginx 调用 CDN 的正确姿势应该是怎么样的?
降智打击…你这么做是把 nginx 当成 dns 用了啊……
@cernard 机械硬盘的读写速度 几乎没见过 100Mbyte/S 以下的 局域网的才 100Mbits/S....你换个 1000mbits 的网络吧
带宽小于硬盘的读写速度…?
2020-04-14 16:04:20 +08:00
回复了 SKull4 创建的主题 程序员 抖音是怎么识别视频的呢
@Aruforce 或者图像相似度算法
2020-04-14 16:02:32 +08:00
回复了 SKull4 创建的主题 程序员 抖音是怎么识别视频的呢
@SKull4 你不该这么问....你该问怎么识别站内视频再投稿...
nginx 并不管理你的 session 你的 session 是 tomcat 管理的…你看看 tomcat 是不是有问题…
closed
1 ... 3  4  5  6  7  8  9  10  11  12 ... 19  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1981 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 16:21 · PVG 00:21 · LAX 09:21 · JFK 12:21
Developed with CodeLauncher
♥ Do have faith in what you're doing.