summaryrefslogtreecommitdiff
path: root/open_issues/multithreading.mdwn
blob: 5924d3f9f3c8f1832d6dcb287f0d15c8ae9f77d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
[[!meta copyright="Copyright © 2010, 2011, 2012 Free Software Foundation,
Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

[[!tag open_issue_hurd]]

Hurd servers / VFS libraries are multithreaded.


# Implementation

  * well-known threading libraries

      * [[hurd/libthreads]]

      * [[hurd/libpthread]]


# Design

See [[hurd/libports]]: roughly using one thread per
incoming request.  This is not the best approach: it doesn't really make sense
to scale the number of worker threads with the number of incoming requests, but
instead they should be scaled according to the backends' characteristics.

The [[hurd/Critique]] should have some more on this.

[*Event-based Concurrency
Control*](http://soft.vub.ac.be/~tvcutsem/talks/presentations/T37_nobackground.pdf),
Tom Van Cutsem, 2009.


## IRC, freenode, #hurd, 2012-07-08

    <youpi> braunr: about limiting number of threads, IIRC the problem is that
      for some threads, completing their work means triggering some action in
      the server itself, and waiting for it (with, unfortunately, some lock
      held), which never terminates when we can't create new threads any more
    <braunr> youpi: the number of threads should be limited, but not globally
      by libports
    <braunr> pagers should throttle their writeback requests
    <youpi> right


# Alternative approaches:

  * <http://www.concurrencykit.org/>

  * Continuation-passing style

      * [[microkernel/Mach]] internally [[uses
        continuations|microkernel/mach/continuation]], too.

  * [[Erlang-style_parallelism]]

      * [[!wikipedia Actor_model]]; also see overlap with
        {{$capability#wikipedia_object-capability_model}}.

  * [libtcr - Threaded Coroutine Library](http://oss.linbit.com/libtcr/)

  * <http://monkey.org/~provos/libevent/>

---

See also: [[multiprocessing]].