首页   注册   登录
 mind3x 最近的时间轴更新
mind3x

mind3x

V2EX 第 67506 号会员,加入于 2014-07-09 23:44:18 +08:00
今日活跃度排名 9348
介绍一个 Rust 版的高性能 lock free concurrent hashmap
分享创造  •  mind3x  •  2019-03-18 22:03:53 PM  •  最后回复来自 mind3x
2
迅极云是不是跑路了?
全球工单系统  •  mind3x  •  2017-09-20 23:14:23 PM  •  最后回复来自 tianwm
2
目测用 GRE 直接导致 IP 被 block
宽带症候群  •  mind3x  •  2018-02-01 13:26:39 PM  •  最后回复来自 redsonic
14
连公司用的 CN2 都被中国电不信 QJ 了
宽带症候群  •  mind3x  •  2016-12-10 08:11:21 AM  •  最后回复来自 akw2312
8
Nexus 6P 更新 7.1beta
Android  •  mind3x  •  2016-10-20 14:37:48 PM  •  最后回复来自 mind3x
2
集思广益: Zite 的替代选择?
问与答  •  mind3x  •  2015-11-25 18:12:51 PM  •  最后回复来自 mind3x
2
这两天 CN2 连 QuadraNet 有点不正常啊
VPS  •  mind3x  •  2015-11-04 14:50:24 PM
你们以为 CN2 就没事了?
  •  2   
    宽带症候群  •  mind3x  •  2015-08-15 12:30:14 PM  •  最后回复来自 marsteel
    18
    似乎 LET 被墙了
    VPS  •  mind3x  •  2015-08-11 14:29:09 PM  •  最后回复来自 yylzcom
    4
    mind3x 最近回复了
    3 天前
    回复了 amiwrong123 创建的主题 Java PriorityBlockingQueue 的构造器好奇怪啊?
    @amiwrong123
    这里我怀疑原因是这样:这个 contravariant 类型 <? super T> 对于使用 Comparator 的情形是有意义的,例如有 type B, D 并且 D extends B,PriorityBlockingQueue<D>可以使用 Comparator<D>,但是也可以使用 Comparator<B>,因此一般这种情况会允许 Comparator<? super T>。
    但 Comparable 是 obj.comparesTo(other),这里用 contravariant 类型没有意义,因为类型擦除,运行时毫无区别,大概只是实习生照着 Comparator 分支抄过来的……
    很好,迈出了走向 Scala 的第一步 [并没有]
    4 天前
    回复了 richangfan 创建的主题 程序员 初中高级程序员是怎么分的?
    @pierswu 这个是最精确的
    4 天前
    回复了 amiwrong123 创建的主题 Java PriorityBlockingQueue 的构造器好奇怪啊?
    哇,非常好的问题。先尝试回答第 2 个:

    PriorityBlockingQueue<E>的类型参数 E 本身没有类型约束(例如 E extends Comparable<E>),因此在 PriorityBlockingQueue 的实现内部,要插入或删除一个 E 类型的元素时,是通过先把元素强转成接口类型 Comparable<? super E>,再进行比较,再赋值给对应的位置 queue[???]。例如

    private static <T> void siftUpComparable(int k, T x, Object[] array) {
    Comparable<? super T> key = (Comparable<? super T>) x;
    while (k > 0) {
    int parent = (k - 1) >>> 1;
    Object e = array[parent];
    if (key.compareTo((T) e) >= 0)
    break;
    array[k] = e;
    k = parent;
    }
    array[k] = key;
    }

    这里的问题是,如果 queue 不是在构造函数里初始化成 Object[]类型,而是 E[]类型,上面的 array[k] = key 将会导致 ArrayStoreException 。例如,如果 E 是 Integer,cast 成 Comparable 没问题,但 Comparable 不是 Integer,没法存回 Integer[]。所以 queue 需要初始化成什么都能存的 Object[]。

    但其实还有更简单的办法——把 array[k]=key 改成 array[k] = x,queue 就可以安安全全的使用 E[] type,也不需要那么多强制转型。至于为什么 Java 没这么做,就不是我能回答的了。

    至于 PriorityBlockingQueue<E>为什么不直接声明成 PriorityBlockingQueue<E extends Comparable<E>>,是因为 PriorityBlockingQueue 同时支持 Comparable 和 Comparator 两种比较接口,插入删除都是两种版本,E 的类型约束都是靠运行时强制转型的动态检查,没法静态声明。
    @lxk11153 我还是要重复,http 1.0/1.1 与是否 HTTPS 没有关系...在 HTTPS 里跑的可以是 1.0 也可以是 1.1 。说白了 1.1 主要的区别只是可以重用连接,所以你看到的客户端大多默认发 1.1 请求。你用 curl 是可以指定发 1.0 请求的。
    @lxk11153 是的,我的回答 #10 就是在说,HTTP 是 HTTP over TCP,HTTPS 是 HTTP over TLS,和 1.0/1.1/2.0 无关。但 2.0 规定必须是 over TLS 。代理是另外一种例外情况。
    @lxk11153

    方案 1: 一台电脑 500 线程 ,无代理 ,请求同一个 http 接口,(可能需要考虑 http 连接池
    方案 2: 一台电脑 500 线程 ,每个线程一个不重复代理 ,请求同一个 http 接口(假设代理质量优

    不看线路连接质量的话,当然是 1 快,2 是完全额外的开销。但直连丢包率高的话走代理就有优势了,就是相当于改个路由。
    @lxk11153 不是,本来 1.0/1.1/2 只是 HTTP 应用层协议,由下面传输层决定是 HTTP 还是 HTTPS (TCP 或 TLS)。复杂的地方在于 HTTP 2 强制要求 TLS,而 HTTP 代理又允许在先走明文 TCP 建立连接,再走 CONNECT 原语在 HTTP 层把连接升级成 HTTPS [大型狗头]
    换句话说,低丢包率的环境(这里说的低是非常低,低于 1%那种),socks 表现会好一些,反之 HTTP 代理会好些。当然,如果可以配置,你也可以让 socks 代理禁用多路复用。
    很难说,要看你实际用的场景。理论上说 Socks 可以单 TCP 连接复用,在里面跑多个连接,能省下从客户端到代理这一段多次建立连接的开销。
    有点类似于 HTTP 1.1 长连接,单次连接可以跑多个 HTTP 请求,省下建立多个连接的三次握手开销。区别是 socks 省的连接建立开销只是客户端到代理这一段;而支持 HTTP 1.1 的代理在两端都只需要一个连接,但只限同一个远端 server(不是代理 server),不同的 server 还是不同的代理连接。
    然而更复杂的情况还有在 socks 里建立 HTTP 1.1 连接,以及 HTTPS / HTTP 2.0 。Socks 在传输层,不管 HTTP 版本,所以哪种 HTTP 都能跑,都能多路复用。HTTP 代理在代 HTTPS 的时候必须走 HTTP CONNECT 建单独的 tunnel,并且 HTTP 2 因为强制 server 端证书,其实不能走 HTTP 代理的。更精确的说,你可以有一个跑 HTTP 2 的协议的 HTTP 代理来获取 HTTP 1.0/1.1+HTTPS 的网站,但无论何种 forward 类型的代理都不能代理 HTTP 2 协议的服务器。只有反代可以代理 HTTP 2 服务,因为反代可以正确配置证书。

    说了一堆,你可能觉得 Socks 代理会更快,但其实未必。多路复用一个 TCP 连接看上去很美好,这也是 Google 当年设计 SPDY 的动机,但实际应用,只要跑在这个单连接里的任意一路 channel 有数据包堵塞,你所有 channel 就全堵塞。

    打个比方,你走 socks 代理复用一个 TCP 建立了 5 个代理连接,走 HTTP 代理用 5 个 TCP 连接建立了 5 个代理连接,如果这 5 个连接里有一个出现丢包,你走 socks 的其他 4 个都得一起等着,而走 HTTP 的另外 4 个还能正常收数据。

    所以说完了都是废话,请实际试试看吧 xD
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2409 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:24 · PVG 20:24 · LAX 05:24 · JFK 08:24
    ♥ Do have faith in what you're doing.