I suggest that you peruse the source code of Pthreads to get some idea of what you do when you create a thread. They are not, as some people appear to believe, a magic way of making the machine do more and go faster.
Threads are of course invaluable when you want one resource, such as a user, to have access to multiple resources. When you have multiple threads accessing one resource, such as a database, then you must have a robust synchronization method, such as a mutex, queue or similar. There is a danger that programmers will implement a busy wait to perform their synchronization and get poor performance. In some low level, low latency cases however the use of the ultimate busy wait, a spin lock, is the best approach. Pavel Ivanov wrote: > So you don't even try to argue about database-servers-like > applications? Apache maybe indeed not very good example because of > good degree of independence between threads, though I think in some > cases caching across different connections and thus across different > threads could be useful. > >> The danger with threading is in concurrent access to data. > > I understand that. That's why concurrent access should be made very > wisely. But if this concurrent access is to some cache which allows to > avoid huge amount of disk reads - it's worth the effort. And my > overall point here is that there's no universal taboo "threads are > evil in all cases". It totally depends on the type of application. > > Pavel > > On Thu, Apr 30, 2009 at 2:54 PM, Roger Binns <rog...@rogerbinns.com> wrote: >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA1 >> >> Pavel Ivanov wrote: >>> I'm curious: with all these "warnings based on science" how would you >>> implement application similar to apache web-server >> The danger with threading is in concurrent access to data. Apache has >> several different modes of operation (forking etc) but in the one that >> uses threading, each thread handles a connection and does not handle or >> share any data with other threads during its operation on that >> connection. For the non-Windows worker (MPM) it also uses multiple >> processes with multiple threads and the processes exit after handling a >> certain number of requests. >> >> As an example you can read about mod_wsgi which provides for running >> Python code as though it was CGI - see http://code.google.com/p/modwsgi/ >> >> Roger >> -----BEGIN PGP SIGNATURE----- >> Version: GnuPG v1.4.9 (GNU/Linux) >> >> iEYEARECAAYFAkn58/MACgkQmOOfHg372QSoOQCfXvz8ef7vS0HP/Uc9hZ/1BQSO >> Cw0AoMXzgpNwO0PA5uMBvG/DB2Y3lKHG >> =Cage >> -----END PGP SIGNATURE----- >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users@sqlite.org >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users