小编Str*_*101的帖子

TCP/IP - 使用每个客户端的线程方法解决C10K

在阅读着名的C10k文章并在网上搜索自编写之后事情如何演变之后,我想知道今天的标准服务器是否有可能使用每个连接的线程处理> 10000个并发连接(可能与一个线程池的帮助,以避免创建/终止进程).


一些可能影响问题解决方法的细节:

  1. 输入,中间处理和输出.
  2. 每个连接的长度.
  3. 服务器的技术规格(核心,处理器,RAM等......)
  4. 将此系统与AIO,轮询,绿色线程等替代技术相结合......

显然我不是这方面的专家,所以任何评论或建议都将受到高度赞赏:)

concurrency multithreading tcp c10k

32
推荐指数
3
解决办法
1万
查看次数

用于对象检测的OpenCV图像预处理

我想知道在计算其特征之前建议应用于图像的一些预处理实践,以便尽可能地提高过程的效率.(例如裁剪,改变格式等......)

提前致谢 :)

opencv image-processing object-detection

11
推荐指数
1
解决办法
1万
查看次数

从多个线程调用accept()

我正在编写一个并发TCP服务器,它必须使用'每个连接的线程'方法处理多个连接(使用线程池).我怀疑哪个是每个线程获得不同文件描述符的最佳方式.

我发现接下来的两种方法是最推荐的:

  1. 主线程认为accepts()所有的传入连接和存储他们的描述符上的数据结构(例如:一queue).然后每个线程都能从队列中获取fd.
  2. 从每个线程直接调用 Accept().(Unix网络编程V1推荐)

我找到他们每个人的问题:

  1. 存储所有fd的静态数据结构必须在线程可以读取之前被锁定(mutex_lock),因此在相当多的线程想要在同一时刻读取的情况下,我不知道会经过多长时间直到所有人都能实现目标.
  2. 我一直在读,与同时调用相关的Thundering Herd问题accept()还没有在Linux上完全解决,所以也许我需要为它创建一个人工解决方案,最终使应用程序至少与方法一样慢1.

资料来源:

(一些链接在讨论方法2:在Linux上存在一个雷鸣般的问题 - 存在问题 - 以及我发现的一篇文章(过时):linux-scalability/reports/accept.html

并且建议方法1的SO答案:可以同时调用接受一个插槽从几个线程同时


我真的对此事感兴趣,所以我会很感激任何意见:)

linux concurrency multithreading tcp

7
推荐指数
1
解决办法
4658
查看次数

OpenCV/C++ - 如何释放指针

我不得不做一个涉及cv :: Ptr(指针)的技巧,以便能够调用特定的函数,但是当程序执行后尝试释放内存时,程序似乎有一些问题,因为发生了分段错误.


1.Code:

SurfDescriptorExtractor extractor1;
 Ptr<DescriptorExtractor> extractor = &extractor1;      
 FlannBasedMatcher matcher1;
 Ptr<DescriptorMatcher> matcher = &matcher1;
Run Code Online (Sandbox Code Playgroud)

2.错误:

Conditional jump or move depends on uninitialised value(s)
==23559==    at 0x56585C0: ____strtod_l_internal (strtod_l.c:1659)
==23559==    by 0x5653FAE: strtod (strtod.c:70)
==23559==    by 0x41425B1: icv_strtod(CvFileStorage*, char*, char**) (in /usr/local/lib/libopencv_core.so.2.4.2)
==23559==    by 0x415875F: icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int) (in /usr/local/lib/libopencv_core.so.2.4.2)
==23559==    by 0x4158BA4: icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int) (in /usr/local/lib/libopencv_core.so.2.4.2)
==23559==    by 0x41593F7: icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int) (in /usr/local/lib/libopencv_core.so.2.4.2)
==23559==    by 0x41593F7: icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv pointers memory-management

0
推荐指数
1
解决办法
1886
查看次数