递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 1923|回复: 13
打印 上一主题 下一主题

[服务器] 双向列表、环形列表、协程环境如何应用?

[复制链接]

73

主题

338

帖子

2013

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2013
跳转到指定楼层
楼主
发表于 2024-8-26 10:06:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
求大佬科普下:
火山服务器的双向列表、环形列表、协程环境。
我看了官方例程,也了解了这些类,但不知道在实际开发中,这些能做什么事情?

回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40517
沙发
发表于 2024-8-26 10:42:05 | 只看该作者
在Go语言中,双向列表(Doubly Linked List)、环形列表(Circular Buffer/Queue)和协程(Goroutine)都是非常有用的结构和特性,它们在不同的场景下可以发挥重要的作用。下面我将分别解释这些概念以及它们在实际开发中的用途。
双向列表 (Doubly Linked List)
双向列表是一种数据结构,其中每个元素包含一个指向前一个元素的指针和一个指向后一个元素的指针。这种结构使得可以从两个方向遍历列表,并且方便地插入或删除元素。
用途:
  • 缓存管理:实现LRU(Least Recently Used)缓存算法。
  • 动态调整的数据集合:当需要频繁地在列表中间添加或移除元素时非常有用。
  • 浏览器历史记录:用于存储用户访问过的页面顺序。
  • 任务调度器:维护待执行任务的列表,可以轻松地调整优先级。

环形列表 / 环形缓冲区 (Circular Buffer / Queue)
环形缓冲区是一个固定大小的数组,它的头部和尾部相连形成一个环。当缓冲区填满时,新的元素会覆盖最旧的元素。
用途:
  • 消息队列:在网络编程中用于处理消息的接收与发送。
  • 数据流处理:例如音频或视频数据流的缓存。
  • 日志记录:用于循环记录最新的日志条目,超出容量后自动覆盖旧的日志。
  • 滑动窗口算法:例如在网络流量监控中统计一段时间内的平均值。
协程 (Goroutine)
协程是Go语言的一个重要特性,它允许你编写并发程序而不需要显式地管理线程。协程比传统的线程更轻量级,由Go运行时调度。
用途:
  • 异步IO:处理网络请求、文件读写等操作,避免阻塞。
  • 并行计算:执行并行任务,如图像处理、大数据分析。
  • 定时任务:使用time.After或time.Ticker来创建定时触发的任务。
  • 服务端并发处理:处理多个客户端连接,每个连接使用一个或多个协程。

安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

73

主题

338

帖子

2013

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2013
板凳
 楼主| 发表于 2024-8-26 10:53:25 | 只看该作者
创世魂 发表于 2024-8-26 10:42
在Go语言中,双向列表(Doubly Linked List)、环形列表(Circular Buffer/Queue)和协程(Goroutine)都是 ...

写的太专业了,眼睛看到了,大脑可能没懂。
回复

使用道具 举报

37

主题

583

帖子

2851

积分

金牌会员

Rank: 6Rank: 6

积分
2851
地板
发表于 2024-8-26 10:58:06 | 只看该作者
PC有没有双向列表。那天我就是想要这种结果,我以为”标准列表模板类“能实现。哈希表是单向对不?
回复

使用道具 举报

73

主题

338

帖子

2013

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2013
5#
 楼主| 发表于 2024-8-26 11:07:52 | 只看该作者
服务器基本类中,有个协程环境,那个是做什么的?
回复

使用道具 举报

26

主题

1899

帖子

6920

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6920
6#
发表于 2024-8-26 14:04:19 | 只看该作者
山梦 发表于 2024-8-26 10:58
PC有没有双向列表。那天我就是想要这种结果,我以为”标准列表模板类“能实现。哈希表是单向对不? ...

PC的列表(链表)是std::list,本身就是双向的,单向链表是std::forward_list,火山没有封装。
PC的哈希表是std::map(没有用到哈希算法,火山里算是翻译错误),只能从小到大排序,这种结构不存在方向,无序哈希表(真用了哈希算法)也不存在方向。
回复

使用道具 举报

37

主题

583

帖子

2851

积分

金牌会员

Rank: 6Rank: 6

积分
2851
7#
发表于 2024-8-26 15:42:27 | 只看该作者
Xelloss0618 发表于 2024-8-26 14:04
PC的列表(链表)是std::list,本身就是双向的,单向链表是std::forward_list,火山没有封装。
PC的哈希表 ...

X大,我真的是小学生,小小学生。没有例子,用不来。
回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40517
8#
发表于 2024-8-26 15:54:51 | 只看该作者
hs999xl 发表于 2024-8-26 10:53
写的太专业了,眼睛看到了,大脑可能没懂。

双向列表就是  可以从前面插入成员,也可以从后面插入成员。使用更方便。

环形的就是,成员数是固定的,当成员满了,如果有新的加入,那么旧的就会被覆盖。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40517
9#
发表于 2024-8-26 15:58:32 | 只看该作者
山梦 发表于 2024-8-26 15:42
X大,我真的是小学生,小小学生。没有例子,用不来。

文本标准列表类    x大说的就是这个,定义变量直接干就行了。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

32

主题

566

帖子

3369

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3369
10#
发表于 2024-8-26 21:44:49 | 只看该作者
配上图就好理解了

24个字节的环形缓冲区_示意图.gif (65.12 KB, 下载次数: 28)

24个字节的环形缓冲区_示意图.gif
Inverse
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-23 04:42 , Processed in 0.105120 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表