mirror of
https://github.com/matrix-construct/construct
synced 2024-11-19 08:21:09 +01:00
ircd::ctx: Update README [skip ci]
This commit is contained in:
parent
3301ed62f7
commit
166236dfe8
1 changed files with 17 additions and 0 deletions
|
@ -53,6 +53,13 @@ among others.
|
||||||
* The primary user object is `ircd::context` (or `ircd::ctx::context`) which has
|
* The primary user object is `ircd::context` (or `ircd::ctx::context`) which has
|
||||||
an `std::thread` interface.
|
an `std::thread` interface.
|
||||||
|
|
||||||
|
* There is no preemptive interleaving of contexts. This makes every sequence
|
||||||
|
of instructions executed a natural transaction requiring no other method of
|
||||||
|
exclusion. It also allows for introspective conditions, i.e: if context switch
|
||||||
|
occurred: refresh value, else the old value is good. This is impossible in a
|
||||||
|
preemptive environment as the result may have changed at every step during and
|
||||||
|
after the process.
|
||||||
|
|
||||||
### Context Switching
|
### Context Switching
|
||||||
|
|
||||||
A context switch has the overhead of a heavy function call -- a function with
|
A context switch has the overhead of a heavy function call -- a function with
|
||||||
|
@ -77,6 +84,16 @@ asynchronous pattern. Context `A` can enqueue context `B` if it knows about `B`
|
||||||
and then choose whether to yield or not to yield. In any case the `io_service`
|
and then choose whether to yield or not to yield. In any case the `io_service`
|
||||||
queue will simply continue to the next task which isn't guaranteed to be `B`.
|
queue will simply continue to the next task which isn't guaranteed to be `B`.
|
||||||
|
|
||||||
|
The most common context switching encountered and wielded by developers is the
|
||||||
|
`ctx::dock`, a non-locking condition variable. The power of the dock is in its:
|
||||||
|
|
||||||
|
1. Lightweight. It's just a ctx::list; two pointers for a list head, where the
|
||||||
|
nodes are the contexts themselves participating in the list.
|
||||||
|
|
||||||
|
2. Cooperative-condition optimized. When a context is waiting on a condition
|
||||||
|
it provides, the ctx system can run the function itself to test the condition
|
||||||
|
without waking up the context.
|
||||||
|
|
||||||
### When does Context Switching (yielding) occur?
|
### When does Context Switching (yielding) occur?
|
||||||
|
|
||||||
Bottom line is that this is simply not javascript. There are no
|
Bottom line is that this is simply not javascript. There are no
|
||||||
|
|
Loading…
Reference in a new issue