导航:首页 > IDC知识 > 线程服务器

线程服务器

发布时间:2020-10-01 02:04:19

1、服务器说的“路、通道、线程”是什么意思?

首先你要明白一点:路、核、线程三者的区别。
路:独立的CPU的个数。
核:单个CPU的物理核心(也叫真实核心)数量。
线程:程序中顺序控制流程的数量。

举个例子,双路四核八线程服务器指的就是该服务器有2个独立的CPU,每个CPU有2个物理核心(2x2=4核),每个核心拥有2条线程(4x2=8线程)。个人PC平台上很少出现“路”这个术语,以前奔腾时代英特尔公司面向桌面级用户倒是做过一些高端的双CPU平台,就是说一块主板上装了两个独立的CPU,和现在的双核CPU不是一个概念。多核CPU是由于后期技术发展后,芯片集成度越来越高,可以把多个物理核心集成在一个CPU上。打个比喻(虽然不恰当),如果把双路看做一对健康的双胞胎的话,那么双核就是一对连体双胞胎。

而所谓的四核八线程(注意:这里没有“路”定义)就是说,一颗独立的CPU上的真实核心数量为4,但是通过超线程技术又模拟出4个核心,看上去像8个核心了,但有4个是模拟出来的,不是真实的,以此类推。这就是所谓的超线程,目前是英特尔公司独有的技术。

至于“几通道”,它指的是服务器进行资源共享操作时的信道数量,它表现的是服务器的网络共享通信那一块的性能,和上面的三个术语面向的对象不同,他们仨表现的是服务器的数据处理那一块的性能,数量越高,服务器多任务处理能力越强。当然,这四个家伙一起展现了一台服务器的综合性能。

2、服务器一般支持多少线程

这个是根据服务器配置(处理器)来的,主流的都是核心数* 2。你可以去服务器厂商(正睿)的网上找找服务器产品,查看一下参数和配置,几分钟就清楚了!

3、服务器CPU是不是线程数越多越好?另外并发访问量最多1000的服务器用什么CPU比较好?

你好.我来解答下你的问题
线程数只是衡量CPU性能的参数之一.并不完全由线程数量来决定CPU的性能.当然.在同等平台和同一级别的处理器.线程数越多性能越强.一般情况下.一台普通配置的服务器最大并发数可以达到几千.一台至强高配置的服务器的最大并发数可以达到上万.你所要求的并发数达到一千.基本上随便一个普通配置就可以满足了.除了配置以外.也要带宽够用才可以保障访问速度.
海腾数据杨闯为你解答.若有服务器问题需要帮忙的可以来找我

4、关于多线程服务器

你说你绑定和监听都好了吧
那么服务就可以这样写
while(bWorking)
{
SOCKET sAccept = accept(sListen, NULL, NULL);
if(sAccept != SOCKET_ERROR)
CreateThread(NULL, 0, ThreadProc, (LPVOID)&sAccept, 0, NULL);
}
相应的线程函数可以这样:
DWORD WINAPI ThreadProc(LPVOID lpPara)
{
SOCKET sComm = *((SOCKET*)lpPara);
//从这里开始读写这个socket就可以了
}
这样就实现了accept一个连接就创建一个线程。

5、Java的服务器一般运行几个线程比较合适

首先确认你是cpu密集型的还是io密集型的,

如果是cpu密集型的线程数可以设置到和cpu个数一致,

如果是io密集型的,首先需要确认你io wait的时间,线程数和io wait时间成正比, 具体需要根据测试得出。

6、服务器,使用多进程 与 多线程 请问有什么区别

关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。

经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更加合适就是哪个好。

我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为是感性的比较,因此都是相对的,不是说一个好得不得了,另外一个差的无法忍受)。
适应于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单
适应于多核分布式
进程占优
1)需要频繁创建销毁的优先用线程
原因请看上面的对比。
这种原则最常见的应用就是Web服务器了,来一个连接建立一个线程,断了就销毁线程,要是用进程,创建和销毁的代价是很难承受的
2)需要进行大量计算的优先使用线程
所谓大量计算,当然就是要耗费很多CPU,切换频繁了,这种情况下线程是最合适的。
这种原则最常见的是图像处理、算法处理。
3)强相关的处理用线程,弱相关的处理用进程
什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。
一般的Server需要完成如下任务:消息收发、消息处理。“消息收发”和“消息处理”就是弱相关的任务,而“消息处理”里面可能又分为“消息解码”、“业务处理”,这两个任务相对来说相关性就要强多了。因此“消息收发”和“消息处理”可以分进程设计,“消息解码”、“业务处理”可以分线程设计。
当然这种划分方式不是一成不变的,也可以根据实际情况进行调整。
4)可能要扩展到多机分布的用进程,多核分布的用线程
原因请看上面对比。
5)都满足需求的情况下,用你最熟悉、最拿手的方式
至于“数据共享、同步”、“编程、调试”、“可靠性”这几个维度的所谓的“复杂、简单”应该怎么取舍,我只能说:没有明确的选择方法。但我可以告诉你一个选择原则:如果多进程和多线程都能够满足要求,那么选择你最熟悉、最拿手的那个。
需要提醒的是:虽然我给了这么多的选择原则,但实际应用中基本上都是“进程+线程”的结合方式,千万不要真的陷入一种非此即彼的误区。

消耗资源:
从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。
通讯方式:
进程之间传递数据只能是通过通讯的方式,即费时又不方便。线程时间数据大部分共享(线程函数内部不共享),快捷方便。但是数据同步需要锁对于static变量尤其注意

线程自身优势:
提高应用程序响应;使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上;
改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

7、什么是多线程并发服务器

有多个 CPU 可用。单核机器上多线程的优势不明显。
线程间有共享数据。如果没有共享数据,用模型 3b 就行。虽然我们应该把线程间的共享数据降到最低,但不代表没有;
共享的数据是可以修改的,而不是静态的常量表。如果数据不能修改,那么可以在进程间用 shared memory,模式 3 就能胜任;
提供非均质的服务。即,事件的响应有优先级差异,我们可以用专门的线程来处理优先级高的事件。防止优先级反转;
latency 和 throughput 同样重要,不是逻辑简单的 IO bound 或 CPU bound 程序;
利用异步操作。比如 logging。无论往磁盘写 log file,还是往 log server 发送消息都不应该阻塞 critical path;
能 scale up。一个好的多线程程序应该能享受增加 CPU 数目带来的好处,目前主流是 8 核,很快就会用到 16 核的机器了。
具有可预测的性能。随着负载增加,性能缓慢下降,超过某个临界点之后急速下降。线程数目一般不随负载变化。
多线程能有效地划分责任与功能,让每个线程的逻辑比较简单,任务单一,便于编码。而不是把所有逻辑都塞到一个 event loop 里,就像 Win32 SDK 程序那样。

与线程服务器相关的知识