线程优先级cpu时间片占有疑问

发表在 POSIX2019-7-12 16:28 [复制链接] 2 132

我这边的项目是探索者STM32F407,使用ESP8266作为外接wifi设备,引入了AT Device库
2 g, m8 N2 O" o3 V; S! \3 Z9 M. B6 O! C
创建了自己的工作线程HttpRequestThread,线程优先级为9
, J) q6 r0 n! c* x  m
3 T/ ~) b( W1 N5 i' NAT Device操作ESP8266模块的线程,看源码是在主线程,通过menuconfig,查看到主线程的优先级为10! N' T1 g0 T  H+ A1 E% N3 _! ?

$ `2 d; ?& g: X/ F2 r在不使用TLS的时候,能够正常发送http请求,正常收到回复
$ ?" b* O% v  N" I2 M
; w6 \" G' W9 _" X8 ]2 r2 w当使用mbedtls库实现https请求的时候,会出现各种问题,要么AT层直接显示recv error,要么就是TLS握手的时候,读的时候,一直等待,无法正常返回,还有其他一些不成功的情况+ K+ E1 `1 j. V: h

* M  E5 f1 w& M3 d4 F" J) J& R- H修改工作线程HttpRequestThread的优先级为11,mbedtls握手成功,https请求正常返回
" T% m5 V1 m7 C4 N- p! z8 u# H
3 d& ^, W$ |$ \2 z我的疑问是:如果是因为线程优先级导致socket读数据的时候没,没有时间片,为什么http请求可以正常返回,http请求也有socket的读操作
8 V$ |7 y! R8 X8 m9 l7 A; M3 F  y* A6 ]# p0 }# W
各位大神有路过,有经历类似情况的,还请帮忙解惑) Q' D6 @, C5 i9 v/ x

4 i: D: Z4 _. f: r* }0 U# `4 q
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-7-12 18:30:51 | 显示全部楼层
flyboy 发表于 2019-7-12 17:47* n4 H. e" K8 [5 U! @
在 RT-Thread 中,只有相同线程相互抢占 cpu的时候,时间片才有意义,优先级不同,就会按照优先级抢占的方 ...

8 {6 b' d- \. Q' R$ c0 k7 ]! U4 m嗯嗯,但为什么不用TLS的时候,http请求就是正常的呢
使用道具 举报 回复
发表于 2019-7-12 17:47:09 | 显示全部楼层
在 RT-Thread 中,只有相同线程相互抢占 cpu的时候,时间片才有意义,优先级不同,就会按照优先级抢占的方式运行,如果优先级相同,但是没有长时间占用cpu,也不会引发时间片调度。0 f( G- [: U# I! k3 ~+ U

' N! P+ r( |# i  W. h1 a3 C$ l楼主,可以看一下,是否由于 HttpRequestThread 优先级高,运行时导致 AT 线程得不到运行,获取不到数据造成的。
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

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