diff --git a/content/posts/linux-io.md b/content/posts/linux-io.md index bab7929..cd02676 100644 --- a/content/posts/linux-io.md +++ b/content/posts/linux-io.md @@ -13,7 +13,7 @@ tags = ['linux', 'io'] * 解决方法二:非阻塞忙轮询 ```cpp while(true) { - for i in 流[] { + for i in stream[] { if(i has data) { read/ other process } @@ -24,8 +24,8 @@ while(true) { select: ```cpp while(true) { - select(流[]); // 阻塞 max 1024个 - for i in 流[] { + select(stream[]); // 阻塞 max 1024个 + for i in stream[] { if(i has data) { read/ other process } @@ -169,4 +169,4 @@ main thread 只用来监听ListenFd 并 Accept,线程池负责ConnFds 过于理想化,需要很多核 -模型五是最合适的 \ No newline at end of file +模型五是最合适的 diff --git a/public/404.html b/public/404.html index da113b1..a668fa4 100644 --- a/public/404.html +++ b/public/404.html @@ -100,7 +100,7 @@ - + diff --git a/public/index.html b/public/index.html index f3809f1..b57d42d 100644 --- a/public/index.html +++ b/public/index.html @@ -100,7 +100,7 @@ - + @@ -223,6 +223,19 @@ + + +
+ +

Rust Concurrency

+ + Rust Concurrency +
+ + +
diff --git a/public/index.xml b/public/index.xml index b7ba452..155a72f 100644 --- a/public/index.xml +++ b/public/index.xml @@ -6,8 +6,15 @@ Recent content on greathongtu 的 Blog Hugo -- gohugo.io en-us - Thu, 14 Mar 2024 19:42:12 +0800 + Sun, 31 Mar 2024 01:39:55 +0800 + + Rust Concurrency + http://localhost:1313/posts/rust-concurrency/ + Sun, 31 Mar 2024 01:39:55 +0800 + http://localhost:1313/posts/rust-concurrency/ + use std::thread; fn main() { // pass a closure let numbers = vec![1, 2, 3]; thread::spawn(move || { for n in numbers { println!("{n}"); } }).join().unwrap(); let t1 = thread::spawn(f); println!("Hello from the main thread."); t1.join().unwrap(); } fn f(){ println!("Hello from another thread!"); let id = thread::current().id(); println!("This is my thread id: {id:?}"); } // scoped thread use std::thread; fn main() { let numbers = vec![1, 2, 3]; // argument s of the closure represents the scope. + React http://localhost:1313/posts/react/ @@ -48,7 +55,7 @@ http://localhost:1313/posts/linux-io/ Fri, 17 Nov 2023 01:04:58 +0800 http://localhost:1313/posts/linux-io/ - 阻塞非阻塞 阻塞占用资源少,但是一个线程通过阻塞IO,只能处理一个请求。 非阻塞需要一直轮询,占用CPU资源大。 解决方法一:阻塞+多线程/多进程。 浪费资源 解决方法二:非阻塞忙轮询 while(true) { for i in 流[] { if(i has data) { read/ other process } } } 方法三:IO多路复用:既能阻塞等待,不浪费CPU资源,也能同一时刻监听多个IO请求的状态 select: while(true) { select(流[]); // 阻塞 max 1024个 for i in 流[] { if(i has data) { read/ other process } } } epoll: while(true) { 可处理的流 = epoll_wait(epoll_fd);// 阻塞 max `cat /proc/sys/fs/file-max` 个 for i in 可处理的流[] { read/ other process } } select/ poll select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将此 Socket 标记为可读或可写, 接着再把整个文件描述符集合拷贝回用户态里,然后用户态还需要再通过遍历的方法找到可读或可写的 Socket,然后再对其处理。 + 阻塞非阻塞 阻塞占用资源少,但是一个线程通过阻塞IO,只能处理一个请求。 非阻塞需要一直轮询,占用CPU资源大。 解决方法一:阻塞+多线程/多进程。 浪费资源 解决方法二:非阻塞忙轮询 while(true) { for i in stream[] { if(i has data) { read/ other process } } } 方法三:IO多路复用:既能阻塞等待,不浪费CPU资源,也能同一时刻监听多个IO请求的状态 select: while(true) { select(stream[]); // 阻塞 max 1024个 for i in stream[] { if(i has data) { read/ other process } } } epoll: while(true) { 可处理的流 = epoll_wait(epoll_fd);// 阻塞 max `cat /proc/sys/fs/file-max` 个 for i in 可处理的流[] { read/ other process } } select/ poll select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将此 Socket 标记为可读或可写, 接着再把整个文件描述符集合拷贝回用户态里,然后用户态还需要再通过遍历的方法找到可读或可写的 Socket,然后再对其处理。 wsl 代理问题 diff --git a/public/posts/cpp-concurrency/index.html b/public/posts/cpp-concurrency/index.html index b4e54f8..6d09be2 100644 --- a/public/posts/cpp-concurrency/index.html +++ b/public/posts/cpp-concurrency/index.html @@ -106,7 +106,7 @@ - + diff --git a/public/posts/go-design/index.html b/public/posts/go-design/index.html index bc4311c..72e89c3 100644 --- a/public/posts/go-design/index.html +++ b/public/posts/go-design/index.html @@ -105,7 +105,7 @@ - + diff --git a/public/posts/index.html b/public/posts/index.html index ede9dfe..3aab243 100644 --- a/public/posts/index.html +++ b/public/posts/index.html @@ -100,7 +100,7 @@ - + @@ -218,6 +218,19 @@ +
+ +

Rust Concurrency

+ + Rust Concurrency +
+ + + + +

React

diff --git a/public/posts/index.xml b/public/posts/index.xml index b22c0c5..ecbc781 100644 --- a/public/posts/index.xml +++ b/public/posts/index.xml @@ -6,14 +6,21 @@ Recent content in Posts on greathongtu 的 Blog Hugo -- gohugo.io en-us - Thu, 14 Mar 2024 19:42:12 +0800 + Sun, 31 Mar 2024 01:39:55 +0800 + + Rust Concurrency + http://localhost:1313/posts/rust-concurrency/ + Sun, 31 Mar 2024 01:39:55 +0800 + http://localhost:1313/posts/rust-concurrency/ + use std::thread; fn main() { // pass a closure let numbers = vec![1, 2, 3]; thread::spawn(move || { for n in numbers { println!("{n}"); } }).join().unwrap(); let t1 = thread::spawn(f); println!("Hello from the main thread."); t1.join().unwrap(); } fn f(){ println!("Hello from another thread!"); let id = thread::current().id(); println!("This is my thread id: {id:?}"); } // scoped thread use std::thread; fn main() { let numbers = vec![1, 2, 3]; // argument s of the closure represents the scope. + React http://localhost:1313/posts/react/ Thu, 14 Mar 2024 19:42:12 +0800 http://localhost:1313/posts/react/ - jsx:component返回的jsx,看起来像html,实际是javascript,通过babel将jsx编译成javascript,这些js最后通过dom操作生产html。jsx融合了html,css,js三个。 props:是属性,是上级component向下级component传递的只读的信息 state:使用useState()返回一个初始值v和一个function setV。useState是一个react Hook。根据当前state更新新的state需要用lambda function UI = 很多components = f(state) Npx create-react-app@5 travel-list 运行:npm start + jsx:component返回的jsx,看起来像html,实际是javascript,通过babel将jsx编译成javascript,这些js最后通过dom操作生产html。jsx融合了html,css,js三个。 props:是属性,是上级component向下级component传递的只读的信息 state:使用useState()返回一个初始值v和一个function setV。useState是一个react Hook。根据当前state更新新的state需要用lambda function UI = 很多components = f(state) Npx create-react-app@5 travel-list 运行:npm install; npm start Cpp Concurrency @@ -48,7 +55,7 @@ http://localhost:1313/posts/linux-io/ Fri, 17 Nov 2023 01:04:58 +0800 http://localhost:1313/posts/linux-io/ - 阻塞非阻塞 阻塞占用资源少,但是一个线程通过阻塞IO,只能处理一个请求。 非阻塞需要一直轮询,占用CPU资源大。 解决方法一:阻塞+多线程/多进程。 浪费资源 解决方法二:非阻塞忙轮询 while(true) { for i in 流[] { if(i has data) { read/ other process } } } 方法三:IO多路复用:既能阻塞等待,不浪费CPU资源,也能同一时刻监听多个IO请求的状态 select: while(true) { select(流[]); // 阻塞 max 1024个 for i in 流[] { if(i has data) { read/ other process } } } epoll: while(true) { 可处理的流 = epoll_wait(epoll_fd);// 阻塞 max `cat /proc/sys/fs/file-max` 个 for i in 可处理的流[] { read/ other process } } select/ poll select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将此 Socket 标记为可读或可写, 接着再把整个文件描述符集合拷贝回用户态里,然后用户态还需要再通过遍历的方法找到可读或可写的 Socket,然后再对其处理。 + 阻塞非阻塞 阻塞占用资源少,但是一个线程通过阻塞IO,只能处理一个请求。 非阻塞需要一直轮询,占用CPU资源大。 解决方法一:阻塞+多线程/多进程。 浪费资源 解决方法二:非阻塞忙轮询 while(true) { for i in stream[] { if(i has data) { read/ other process } } } 方法三:IO多路复用:既能阻塞等待,不浪费CPU资源,也能同一时刻监听多个IO请求的状态 select: while(true) { select(stream[]); // 阻塞 max 1024个 for i in stream[] { if(i has data) { read/ other process } } } epoll: while(true) { 可处理的流 = epoll_wait(epoll_fd);// 阻塞 max `cat /proc/sys/fs/file-max` 个 for i in 可处理的流[] { read/ other process } } select/ poll select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将此 Socket 标记为可读或可写, 接着再把整个文件描述符集合拷贝回用户态里,然后用户态还需要再通过遍历的方法找到可读或可写的 Socket,然后再对其处理。 wsl 代理问题 diff --git a/public/posts/linux-io/index.html b/public/posts/linux-io/index.html index d812040..8e19d80 100644 --- a/public/posts/linux-io/index.html +++ b/public/posts/linux-io/index.html @@ -54,7 +54,7 @@ @@ -104,7 +104,7 @@ - + @@ -233,7 +233,7 @@

Linux 网络I/O复用并发模型

  • 解决方法二:非阻塞忙轮询
  • while(true) {
    -    for i in [] {
    +    for i in stream[] {
             if(i has data) {
                 read/ other process
             }
    @@ -244,8 +244,8 @@ 

    Linux 网络I/O复用并发模型

    select:
    while(true) {
    -    select([]); // 阻塞 max 1024个
    -    for i in [] {
    +    select(stream[]); // 阻塞 max 1024个
    +    for i in stream[] {
             if(i has data) {
                 read/ other process
             }
    diff --git a/public/posts/map-reduce/index.html b/public/posts/map-reduce/index.html
    index 87320e5..5d8cddb 100644
    --- a/public/posts/map-reduce/index.html
    +++ b/public/posts/map-reduce/index.html
    @@ -104,7 +104,7 @@
       
     
       
    -  
    +  
     
       
       
    diff --git a/public/posts/react/index.html b/public/posts/react/index.html
    index 70a46c6..2cd690c 100644
    --- a/public/posts/react/index.html
    +++ b/public/posts/react/index.html
    @@ -102,7 +102,7 @@
       
     
       
    -  
    +  
     
       
       
    @@ -257,6 +257,12 @@ 

    React