Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl线程是否具有与内核线程相同的优势?_Perl_Multithreading - Fatal编程技术网

perl线程是否具有与内核线程相同的优势?

perl线程是否具有与内核线程相同的优势?,perl,multithreading,Perl,Multithreading,内核线程在内核级别而不是进程级别进行上下文切换 我计划用perl设置一个httpserver。我想知道,从上下文切换的角度来看,perl线程是否具有与内核线程相同的优势。/usr/bin/perl是一个用户区应用程序,因此不使用内核线程-因此,它将处于进程级别,而不是内核级别。内核线程的唯一使用时间是在内核代码中,其他的都在userland中。因此,如果您不是在编写内核模块或在内核源代码树上编写C,那么您就是在用户土地上。我有理由相信,如果您试图编写一个高性能服务器,Perl不是解决这个问题的方

内核线程在内核级别而不是进程级别进行上下文切换


我计划用perl设置一个httpserver。我想知道,从上下文切换的角度来看,perl线程是否具有与内核线程相同的优势。

/usr/bin/perl是一个用户区应用程序,因此不使用内核线程-因此,它将处于进程级别,而不是内核级别。内核线程的唯一使用时间是在内核代码中,其他的都在userland中。因此,如果您不是在编写内核模块或在内核源代码树上编写C,那么您就是在用户土地上。

我有理由相信,如果您试图编写一个高性能服务器,Perl不是解决这个问题的方法——线程或无线程(顺便说一句,Perl线程很糟糕,但这与此无关)


上下文切换不是内核模式“更高效”的原因,而是因为它们没有系统调用开销。话虽如此,这些低水平优化的好处是非常非常有利的。如果您的应用程序对性能非常关键,需要进行这些优化,那么您可能只需要以更低廉的成本投入更多的机器(这当然是一个管理决策)。编写内核代码容易出错(即错误会使内核崩溃或崩溃),并且很难维护,因为它需要为每个新的内核版本进行更新。

Perl线程是完全不同的。我同意。如果您想要一个高性能的web服务器,请使用C/C++并链接到pthreads。注意Apache使用fork()和pthreads的组合来获得最佳性能(mpm_prefork),而不仅仅是pthreads。@Ninefingers,不,prefork是无线程的,您想到的是mpm_worker。就perl而言,“最优”是有争议的。