Sous Linux, si deux threads sont créés et tous les deux sont en cours d'exécution, lorsque l'un d'eux appelle recv()
ou tout appel système IO qui se bloque lorsqu'aucune donnée n'est disponible, qu'arriverait-il au processus entier?Qu'advient-il des autres threads lorsqu'un thread est bloqué?
Est-ce que l'autre thread bloquera aussi? Je suppose que cela dépend de la façon dont le thread est implémenté. Si la bibliothèque de threads est dans l'espace utilisateur et que le noyau ignore totalement les threads dans le processus, alors process est l'entité de planification et ainsi les deux threads sont bloqués.
De plus, si l'autre thread ne bloque pas à cause de cette, peut-il alors send()
données via la même prise, ce qui bloque le fil recv
? Duplexing?
Des idées?
Merci! une réponse assez complète. bon appel. – Figo
Une question de plus, si des données sont arrivées au socket avant qu'un thread appelle recv(), le thread va-t-il réellement obtenir ces données? – Figo
Oui. C'est vraiment la seule façon de travailler sur des sockets de datagramme non bloquants. Quelques petites notes, que j'ai l'intention d'aider - une, vous pouvez expérimenter avec ce genre de chose assez facilement. Ecrivez un petit programme qui acceptera une connexion, puis dormirez un moment, puis appelez 'recv' sur la nouvelle connexion.Utilisez 'nc' (netcat) ou quelque chose pour créer la connexion à votre serveur et y écrire des données immédiatement. Vous verrez que le serveur a reçu les mêmes données que vous avez envoyées. Deuxième remarque - c'est vraiment une troisième question distincte sur ce qui est généralement un forum de questions à la fois ... –