OVH Cloud OVH Cloud

Windows est rapide, Microsoft est meilleure

388 réponses
Avatar
Jérémie Bottone
debug this fifo a formulé la demande :
> Jérémie Bottone wrote:
>
>> - Lent
>
> windows aussi est lent.





Faut, il n'y a qu'à voir le temps pour ouvrir OpenOffice ou Mozilla
sous Windows ou Linux, et on jette Linux

Dans l'ensemble, n'importe quellles t'aches faites sous Windows, par un
utilisateur expérimenté ou pas, sont faites beaucoup plus rapidment,
qu'elles soient locales ou distantes

Pourquoi ? Car Linux est un système bricolé par des bricoleurs, basé
sur du code UNIX datant de 30 ans

Les programmeurs LINUX sont incapable de faire des logiciels terminés
qui fonctionnement bien, d'où e pourquoi du larmoyement et du
pleurnichage perpetuel, de la victimisation même

Alors ils disent: Bouhhhhhh, tous les codes sources doivent être
ouverts !

(Ceci pour éviter de se donner de la peine de développer, et de pouvoir
"pomper" allieurs ce qu'ils sont incapanle de réaliser)

Je hais LINUX et cette mentalité

Microsoft, est une usine de développement, dont il sort des milliers de
logiciels de qualité, s'attirant la jalousie de tous les pingouins du
monde

...Et LINUX C'EST DE LA MERDE

JB

10 réponses

Avatar
remy
JKB a écrit :
Le 30-07-2009, ? propos de
Re: Windows est rapide, Microsoft est meilleure,
remy ?crivait dans fr.comp.os.linux.debats :
JKB a écrit :

si il y a émulation d'une fonctionnalité sous cygwin
donc je suis dans le user land donc il ne peut pas y avoir
plusieurs processus dans le gestionnaire de taches de windows
quand je fais tourner un programme multi thread
bicause gestion concurrentielle des données


Pardon ? Qu'est-ce qui s'y oppose ? Tu lances deux exécutables
indépendants qui effectuent chacun un sleep()... Il est parfaitement
normal d'avoir deux entrées dans la table des processus.



tu rigoles

parce que windows peut suspendre indépendamment chaque processus sans
tenir conte de l'atomicité ou exclusion

puisque le code est en user land et qui ne le prendra pas en compte
tu sais la fameuse émulation



Je viens de relire attentivement plusieurs fois sans rien
comprendre. Exprime-toi en français, s'il te plaît.

JKB



si tu codes une exclusion un machin bidule en userland que tu as 2
processus distincts
des vrais, la gestion des processus faite par le noyau de windows ne
prendra pas en compte ton exclusion parce qu'elle n'est pas dans le
noyau,il n'est pas au courant ,il va s'asseoir dessus et il ne le
saura même pas

pour que ton exclusion soit prise en compte par le noyau
il faudrait que ce soit une surcharge d'une fonction qui permette
de faire la même chose et dans ce cas là, c'est pas une émulation
mais une surcharge de prototype de fonction pour avoir une conformité
posix

à mon avis

remy




--
http://remyaumeunier.chez-alice.fr/
Avatar
Toxico Nimbus
Le 30/07/2009 15:36, remy a écrit :
JKB a écrit :
Le 30-07-2009, ? propos de
Re: Windows est rapide, Microsoft est meilleure,
remy ?crivait dans fr.comp.os.linux.debats :
JKB a écrit :

si il y a émulation d'une fonctionnalité sous cygwin
donc je suis dans le user land donc il ne peut pas y avoir
plusieurs processus dans le gestionnaire de taches de windows
quand je fais tourner un programme multi thread
bicause gestion concurrentielle des données


Pardon ? Qu'est-ce qui s'y oppose ? Tu lances deux exécutables
indépendants qui effectuent chacun un sleep()... Il est parfaitement
normal d'avoir deux entrées dans la table des processus.



tu rigoles

parce que windows peut suspendre indépendamment chaque processus sans
tenir conte de l'atomicité ou exclusion

puisque le code est en user land et qui ne le prendra pas en compte
tu sais la fameuse émulation


Je viens de relire attentivement plusieurs fois sans rien
comprendre. Exprime-toi en français, s'il te plaît.

JKB



si tu codes une exclusion un machin bidule en userland que tu as 2
processus distincts
des vrais, la gestion des processus faite par le noyau de windows ne
prendra pas en compte ton exclusion parce qu'elle n'est pas dans le
noyau,il n'est pas au courant ,il va s'asseoir dessus et il ne le
saura même pas

pour que ton exclusion soit prise en compte par le noyau
il faudrait que ce soit une surcharge d'une fonction qui permette
de faire la même chose et dans ce cas là, c'est pas une émulation
mais une surcharge de prototype de fonction pour avoir une conformité
posix

à mon avis



C'est tout de suite plus clair.
Pourquoi ne l'as-tu pas présenté comme ça dès le début ?

--
Toxico Nimbus
Avatar
remy
Toxico Nimbus a écrit :


C'est tout de suite plus clair.
Pourquoi ne l'as-tu pas présenté comme ça dès le début ?




mais cela ne nous dit toujours pas ce
qui et fait dans cygwin

--
http://remyaumeunier.chez-alice.fr/
Avatar
remy
remy a écrit :
Toxico Nimbus a écrit :

C'est tout de suite plus clair.
Pourquoi ne l'as-tu pas présenté comme ça dès le début ?




mais cela ne nous dit toujours pas ce
qui et fait dans cygwin



#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

pthread_mutex_t count_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t condition_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t condition_cond = PTHREAD_COND_INITIALIZER;

void *functionCount1();
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *my_thread_process (void * arg)
{
int i;

for (i = 0 ; i < 100 ; i++) {
printf ("Thread %s: %dn", (char*)arg, i);
sleep (5);
}
pthread_exit (0);
}

main (int ac, char **av)
{
pthread_t th1, th2;
void *ret;

if (pthread_create (&th1, NULL, my_thread_process, "1") < 0) {
fprintf (stderr, "pthread_create error for thread 1n");
exit (1);
}

if (pthread_create (&th2, NULL, my_thread_process, "2") < 0) {
fprintf (stderr, "pthread_create error for thread 2n");
exit (1);
}

(void)pthread_join (th1, &ret);
(void)pthread_join (th2, &ret);
}

cc -lpthread pthread1.c
./a.out


il y a un truc qui m'échappe
parce qu'avec ps sous linux je ne vois pas les 2 threads
donc le raisonnement est bon mais par contre pour comprendre
comment sont gérés les threads c'est pas gagné


remy




--
http://remyaumeunier.chez-alice.fr/
Avatar
remy
remy a écrit :
remy a écrit :
Toxico Nimbus a écrit :

C'est tout de suite plus clair.
Pourquoi ne l'as-tu pas présenté comme ça dès le début ?



mais cela ne nous dit toujours pas ce
qui et fait dans cygwin



#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

pthread_mutex_t count_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t condition_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t condition_cond = PTHREAD_COND_INITIALIZER;

void *functionCount1();
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *my_thread_process (void * arg)
{
int i;

for (i = 0 ; i < 100 ; i++) {
printf ("Thread %s: %dn", (char*)arg, i);
sleep (5);
}
pthread_exit (0);
}

main (int ac, char **av)
{
pthread_t th1, th2;
void *ret;

if (pthread_create (&th1, NULL, my_thread_process, "1") < 0) {
fprintf (stderr, "pthread_create error for thread 1n");
exit (1);
}

if (pthread_create (&th2, NULL, my_thread_process, "2") < 0) {
fprintf (stderr, "pthread_create error for thread 2n");
exit (1);
}

(void)pthread_join (th1, &ret);
(void)pthread_join (th2, &ret);
}

cc -lpthread pthread1.c
./a.out


il y a un truc qui m'échappe
parce qu'avec ps sous linux je ne vois pas les 2 threads
donc le raisonnement est bon mais par contre pour comprendre
comment sont gérés les threads c'est pas gagné




donc

./a.out

:~$ ps -C a.out -L
PID LWP TTY TIME CMD
2859 2859 pts/1 00:00:00 a.out
2859 2860 pts/1 00:00:00 a.out
2859 2861 pts/1 00:00:00 a.out
:~$


java exemple

:~$
:~$ ps -C java -L
PID LWP TTY TIME CMD
2888 2888 pts/1 00:00:00 java
2888 2889 pts/1 00:00:00 java
2888 2890 pts/1 00:00:00 java
2888 2891 pts/1 00:00:00 java
2888 2892 pts/1 00:00:00 java
2888 2893 pts/1 00:00:00 java
2888 2894 pts/1 00:00:00 java
2888 2895 pts/1 00:00:00 java
2888 2896 pts/1 00:00:00 java
2888 2897 pts/1 00:00:00 java
2888 2898 pts/1 00:00:00 java
:~$

l'on a des threads dans les 2 cas
maintenant sous cygwin émulation ou implémentation ...

ce qui est sûr c'est que l'on a pas un processus par threads
du moins sous linux


remy


--
http://remyaumeunier.chez-alice.fr/
Avatar
Bruno Ducrot
On 2009-07-30, Toxico Nimbus wrote:
Le 30/07/2009 11:44, Bruno Ducrot a écrit :
On 2009-07-29, Toxico Nimbus wrote:
Le 29/07/2009 14:09, Nicolas George a écrit :
JKB , dans le message, a
écrit :
Des bibliothèques (logicielles s'entend) ne s'émulent pas. Elles sont
mises en oeuvre, ou implémentées.


On est d'accord et j'ai dit que c'était un raccourci de langage dans
le sens où on ne peut pas prétendre implanter les specs Posix en
userland.


Je pense que tu t'égares un peu en insistant sur la distinction kernelspace
/ userland. Par exemple, sur un micro-noyau convenablement conçu, on peut
parfaitement implémenter POSIX en userland.


Quelque soit le noyau, POSIX n'est implémentable correctement que si le
noyau fournit le moyen de garantir l'atomicité de n'importe quelle
portion de code, plus des signaux et des sémaphores compatibles avec
ceux de la spécification. A partir de là, tout le reste doit être
implémentable.
Je ne vois ici aucun rapport au type de noyau.




Dans le cas d'un micro-noyau, on peut tres bien imagine avoir un
serveur tel qu'un lock manager (qui sera forcement en userspace)
qui pourra guarantir les portions critiques d'un process.



A partir du moment où il y a préemption, il y a un passage en mode
noyau. Aucun bout de code utilisateur ne peut empêcher le noyau de
reprendre la main. Il y aura donc forcément un appel dans ton serveur
lock manager vers le noyau pour désactiver l'ordonnanceur et les
interruptions le temps d'exécuter la portion critique.



Forcement. C'est bien a ca que ca sert, un serveur. Faire
la liaison entre le micro-noyau et les applications.

On en revient toujours au même : ce n'est implémentable en mode
utilisateur que si le noyau possède déjà toutes les fonctionnalités de
base. Ce sera aussi le cas pour la gestion des signaux, les sémaphores etc.



Euh, sous hurd, la gestion des signaux est faite dans proc (ou
bien exec, j'avoue que je ne m'en souviens plus tres bien).

--
Bruno Ducrot

-- Which is worse: ignorance or apathy?
-- Don't know. Don't care.
Avatar
Doug713705
Le Thu, 30 Jul 2009 17:13:16 +0200, remy a gâché de la bande passante
pour
nous écrire :

Le Thu, 30 Jul 2009 17:13:16 +0200, remy a gâché de la bande passante
pour
nous écrire :

ce qui est sûr c'est que l'on a pas un processus par threads du moins
sous linux



Le contraire serait étonnant non ?

--
@+
Doug - Linux user #307925 - Slamd64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]
Avatar
Stephane TOUGARD
doug713705 wrote:
Je ne pense pas que JKB dise que c'est parce que c'est en userland que
cette implémentation devient une émulation mais plutôt que parce
Windows ne permet pas une implémentation correcte de la chose, il est
nécessaire de passer par une émulation en userland.



Une emulation de quoi ?

Parce que chez moi, le fait de mettre un morceau de code ici plutot que
la ou le fait de faire un truc degueulasse parce qu'il y a pas moyen de
le faire proprement. Ca s'est jamais appele "emulation".

A la rigueur, implementation de merde. Oui, ca c'est possible.
Avatar
Toxico Nimbus
Le 30/07/2009 17:33, Bruno Ducrot a écrit :

[snip]

On en revient toujours au même : ce n'est implémentable en mode
utilisateur que si le noyau possède déjà toutes les fonctionnalités de
base. Ce sera aussi le cas pour la gestion des signaux, les sémaphores etc.



Euh, sous hurd, la gestion des signaux est faite dans proc (ou
bien exec, j'avoue que je ne m'en souviens plus tres bien).



Peut-être mais encore une fois, qui dit signaux dit préemption, donc
mode noyau. Même si le gros de la gestion est fait en mode user, il y a
forcément une ou deux primitives du noyau qui seront appelées au milieu.

--
Toxico Nimbus
Avatar
JKB
Le 31-07-2009, ? propos de
Re: Windows est rapide, Microsoft est meilleure,
remy ?crivait dans fr.comp.os.linux.debats :
Doug713705 a écrit :
Le Thu, 30 Jul 2009 17:13:16 +0200, remy a gâché de la bande passante
pour
nous écrire :

Le Thu, 30 Jul 2009 17:13:16 +0200, remy a gâché de la bande passante
pour
nous écrire :

ce qui est sûr c'est que l'on a pas un processus par threads du moins
sous linux



Le contraire serait étonnant non ?



oui oui mes cours de système commencent à être rouillés hein

un forck est une copie d'un processus père
un thread partage un même espace d'adressage
donc il ne peut pas y avoir de pid différent pour chaque thread
contrairement au processus



Si, il peut. Tu peux avoir une implantation de threads qui utilisent
le même PID vu du système. Tu peux aussi bien avoir une implantation de
threads qui utilisent autant de PID que de threads. C'est au passage ce
que fait Linux (le truc qui s'appelle serveur.rpl est un programme de
calcul parallèle de ma sauce qui utilise massivement les threads) :

cauchy:[~/programmes/optimisation] > pstree -ap | grep serveur
| `-serveur.rpl,6090 -csdnp ./serveur.rpl
| |-serveur.rpl,6117 -csdnp ./serveur.rpl
| |-serveur.rpl,6119 -csdnp ./serveur.rpl
| |-{serveur.rpl},6115
| |-{serveur.rpl},6116
| |-{serveur.rpl},6118
| `-{serveur.rpl},6120
cauchy:[~/programmes/optimisation] >

Par contre, Posix stipule que getpid() appelé depuis n'importe quel
thread doit renvoyer le pid du processus père.

quant à la gestion du temps machine elle ne doit pas être très
différente chaque processus ou thread vit sa vie la différence se
trouve dans la gestion de la mémoire



P'taing, relis-toi ou achète un bouquin traitant de la ponctuation,
c'est illisible ! De toute façon, la différence est nette. Les
ressources ne sont pas traitées du tout de la même façon et la
distinction est plus complexe (tu peux avoir des threads qui ne
partagent aucune ressource sauf la mémoire allouée à grands coups de
malloc() ou de mmap(), même les variables globales peuvent ne pas être
partagées !).

j'ai pas écrit que l'on ne pouvait pas partager des données entre un
processus père et fils hein



Heureusement, parce que sauf à vouloir absolument jouer avec
shm_open, je ne vous pas comment faire de façon portable. Et
l'utilisation de ressources partagées entre processus est assez
casse-gueule pour plusieurs raisons : ces ressources sont non volatiles
(elles restent disponibles tant qu'on ne les a pas effectivement
purgées, ce qui fait que le programme en question doit être parfaitement
déverminé) et l'allocation se fait à peu près exclusivement à grands
coups de mmap() (ce qui a un avantage, munpmap() renvoyant la mémoire
au système sous Solaris contrairement à malloc() qui la redonne à
l'application, et un _gros_ inconvénient, la granularité de mmap() est
bien plus grosse que celle de malloc()).

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.