我是这个领域的初学者.
我研究过fork(),vfork(),clone()和并行线程.
我注意到pthread_create()会创建一个线程,这比创建一个新进程的开销要少fork().此外,该线程将与父进程共享文件描述符,内存等.
但是,当是fork()和clone()比并行线程更好?你能通过给出现实世界的例子向我解释一下吗?
提前致谢.
我正在通过代码(使用 OpenSSL API)为我的服务器应用程序生成 X509 证书。我刚刚通过在我的代码的支持列表中添加 TLSv1.3 密码来添加对 TLSv1.3 的支持。
证书生成和将 RSA pub + 私钥分配给证书没有任何变化。
我已在客户端升级 curl 和 OpenSSL 库以启用 TLSv1.3 连接。升级的 Curl 版本:7.63.0 & OpenSSL 版本:1.1.1
我看到以下错误:
* TCP_NODELAY set
* Connected to <domain> (<ip-address>) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: myCA.pem
CApath: none
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello …Run Code Online (Sandbox Code Playgroud) 我已经做了strace(1)的pthread_create(3).它间接调用clone(2)系统调用.
它将设置以下标志:(我正在使用i386 GNU/Linux(Mint 13))
CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM | CLONE_SETTLS | CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID
Run Code Online (Sandbox Code Playgroud)
这个旗帜我很好.但我的问题是为什么pthread_create()设置CLONE_CHILD_CLEARTID标志?根据我的知识,CLONE_CHILD_SETTID将子线程id设置在子存储器中的位置ctid,并CLONE_CHILD_CLEARTID在子进入时将其擦除.
(因为没有CLONE_CHILD_SETTID设置标志,为什么CLONE_CHILD_CLEARTID?)
真的需要吗?当我们想要实现pthread_create()使用功能时,我们应该设置什么是理想的标志clone(2)?
这个领域的初学者.