mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-27 23:04:05 -06:00
vault backup: 2022-10-12 09:59:42
This commit is contained in:
parent
0bc4c76bd8
commit
bdce9d72d7
@ -27,7 +27,7 @@ ptr = mmap(NULL, 10240, PROT_READ|PROT_WRITE,
|
|||||||
MAP_SHARED | MAP_FILE, random_fd, 0);
|
MAP_SHARED | MAP_FILE, random_fd, 0);
|
||||||
```
|
```
|
||||||
|
|
||||||
private mapping is often ysed to set up new memory sections.
|
private mapping is often used to set up new memory sections.
|
||||||
``` c
|
``` c
|
||||||
fd = open("mmap_test_file", O_RDWR); p
|
fd = open("mmap_test_file", O_RDWR); p
|
||||||
tr = mmap(NULL, 10240, PROT_READ|PROT_WRITE,
|
tr = mmap(NULL, 10240, PROT_READ|PROT_WRITE,
|
||||||
@ -35,5 +35,59 @@ tr = mmap(NULL, 10240, PROT_READ|PROT_WRITE,
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Threads
|
# Threads
|
||||||
|
|
||||||
|
## product consumer problem
|
||||||
|
- a producer process writes data to a buffer of fied size
|
||||||
|
- a consumer reads data from the buffer
|
||||||
|
these two processes are being scheduled independently by the CPU
|
||||||
|
|
||||||
|
producer must wait if buffer is full
|
||||||
|
consumer must wait if buffer is empty
|
||||||
|
|
||||||
|
## threads
|
||||||
|
- allows more convenient data sharing
|
||||||
|
- threads within a single process share everything except they have their own program counter, registers and stack space
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## why
|
||||||
|
- responsiveness - parrallelism - dont have to wait
|
||||||
|
- resource sharing - automaticall share everything in same process
|
||||||
|
- economy - lightweight, creating and switching between threads is faster than creating heavyweight processes
|
||||||
|
- scalability - each to work on multiprocessor architectures
|
||||||
|
|
||||||
|
## pthread
|
||||||
|
- pthread_create(): create a thread
|
||||||
|
- pthread_exit(): terminate a thread
|
||||||
|
- pthread_join(): wait for a thread to terminate
|
||||||
|
- pthread_detach(): detach a thread so that it won’t be waited
|
||||||
|
- pthread_self(): get the thread id of the current thread
|
||||||
|
- pthread_equal(): compare if two threads are the same
|
||||||
|
- pthread_cancel(): send a cancellation request to a thread
|
||||||
|
|
||||||
|
``` c
|
||||||
|
void *myThreadFun(void *vargp) {
|
||||||
|
sleep(1)
|
||||||
|
printf("Hello from Thread \n")
|
||||||
|
return NULL
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
pthread_t thread_id
|
||||||
|
printf("Before Thread\n")
|
||||||
|
pthread_create(&thread_id, NULL, myThreadFun, NULL)
|
||||||
|
pthread_join(thread_id, NULL)
|
||||||
|
printf("After Thread\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## web server thread
|
||||||
|
- a web server is a process that provides data over the web to requesting clients
|
||||||
|
- a thread is created for each request
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Lightweight process - shares everything except the stack
|
Lightweight process - shares everything except the stack
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user