gRPC系列:(2) gRPC开发实战-Server端

这是我gRPC系列的第二篇, 上一篇是 gRPC系列:(1)Protobuf 简要介绍 | Finley’s Blog 前言 这篇文章将开发一个简单的测试项目,使用 Golang 作为服务器, 前端将使用三种不同的技术:Golang 的 cli 项目、Flutter 的 Desktop 项目、Vue (gRPC-Web) 这篇文章将在简要介绍gRPC的基础上,开发一个 Golang 的gRPC 服务器,并且使用 gRPCurl 和 Apifox 进行测试。 Proto 设计 编写 proto 文件 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 syntax = "proto3"; package user; option go_package = "/api"; import "google/protobuf/empty....

2023/07/28 · updated 2023/10/31 · 793 words · Finley Ge

线程、进程、协程

引言 程序的并发实现方式,常见的无非如题所述的三种: 线程、进程和协程。本文将总结三者的区别,以及在 python 和 golang 等语言中的实际应用。 并发、并行、异步、同步 并发 (Concurrency),是指在同一段时间内执行多个程序 并行(Parallelism),是指在同一刻有多个程序在同时执行 并发可以理解为两个(或多个)程序表现上能同时进行。 而真正意义上的同时,对于单核CPU,真正意义上的并行(在某一个时刻,同时运行多个程序)并不存在。 因此从直白的说,并发是一种程序的调度技术,使CPU的空闲时间降低,而大大提高效率。 CPU 本身也有并发技术,如中断机制、流水 CPU、DMA等等,这并非是本文的重点。 异步(Asynchrony),是指多个程序的运行并没有时间上的顺序关系 非阻塞(Non-blocking),是指程序的执行过程中不存在等待,是异步的实现 同步(Synchrony),和异步相对,程序的运行有时间上的顺序,通常会有阻塞 阻塞 (Blocking), 是指任务执行过程中的暂停或等待,通常是为了实现同步 在时序逻辑电路中也有同步和异步的概念,同步的时序逻辑电路通常引入一个统一的时钟信号。 并发安全 程序的并发需要考虑的一个问题就是并发安全。 对于一段数据,由于并发的存在,可能存在脏读的情况。 一般的解决方式是通过加锁的方式,产生一定程度上的阻塞,从而避免并发导致的数据冲突。 能避免由于并发而造成的数据冲突的数据结构称之为并发安全的(或是线程安全的) 线程 线程 (Thread) 是 CPU 调度的最小单位。也就是说子线程的执行先后顺序是由CPU决定调度的。 一个进程可以有多个线程。 Python 中多线程的实现 1 2 3 4 5 6 7 8 9 10 11 12 13 import threading def sub_program(name: str) -> None: for _ in range(5): print(f'Hello {name}') def main() -> None: threads = [threading....

2023/06/29 · updated 2023/10/31 · 374 words · Finley Ge
晋ICP备2022008114