版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1/1tolua#异步编程支持研究第一部分tolua#异步模型分析 2第二部分回调函数机制探究 5第三部分事件驱动机制实现 8第四部分协程编程支持评估 11第五部分并发任务管理策略 14第六部分线程通信与同步机制 17第七部分异步编程性能优化 20第八部分异步编程实践案例 22
第一部分tolua#异步模型分析关键词关键要点协程与Lua状态机
1.利用协程机制,实现Lua函数的异步执行,避免阻塞主线程。
2.利用Lua状态机,管理协程的生命周期,保证协程执行的顺序和安全。
3.通过回调函数,衔接协程之间的通信,实现异步编程的流程控制。
事件驱动与回调函数
1.利用Lua的事件驱动模型,监听异步操作的完成事件。
2.通过回调函数,处理异步操作的结果,执行后续的逻辑。
3.采用事件循环机制,不断轮询事件队列,及时响应异步操作的完成。
消息队列与消息传递
1.使用消息队列,解耦异步操作与主程序之间的通信。
2.通过消息传递机制,将异步操作的中间结果或最终结果传输给主程序。
3.采用队列数据结构,确保消息的按序处理,避免消息丢失或顺序混乱。
并发控制与原子操作
1.利用Lua的内置锁机制,控制对Lua状态和变量的并发访问。
2.通过原子操作,保证多线程并行执行时对共享数据的安全访问。
3.采用无锁编程技术,优化并发性能,减少程序开销。
异常处理与错误恢复
1.在异步编程中引入异常处理机制,捕捉和处理异步操作中的错误。
2.通过错误恢复机制,保证异步操作失败时程序的健壮性和可恢复性。
3.利用Lua的错误处理机制,提供友好的错误信息和解决方案。
性能优化与调优
1.优化协程调度算法,提升协程执行效率。
2.采用合理的线程池机制,优化线程并发性能。
3.通过性能监控和分析工具,发现并优化异步编程的性能瓶颈。tolua#异步模型分析
前言
tolua#是一种流行的C/C++和Lua脚本语言之间的绑定库,它为异步编程提供了支持。异步编程允许应用程序在不阻塞主线程的情况下执行耗时操作,从而提高了应用程序的响应能力和性能。
特点
tolua#的异步模型具有以下特点:
*基于协程:tolua#使用协程来实现异步编程。协程是一种轻量级的线程,可以暂停和恢复执行,从而实现非阻塞的异步操作。
*回调函数:异步操作的回调函数用于处理操作完成后的结果。当异步操作完成时,tolua#会调用回调函数,并将结果传递给它。
*智能指针:tolua#使用智能指针来管理协程和回调函数的生命周期。这有助于防止内存泄漏和释放后使用错误。
工作原理
tolua#的异步模型工作原理如下:
1.创建一个协程来执行耗时操作。
2.在协程中调用异步函数,并指定一个回调函数。
3.协程挂起,主线程继续执行。
4.当异步操作完成时,tolua#会调用回调函数。
5.回调函数处理操作的结果,并继续协程的执行。
优势
tolua#的异步模型相比传统的线程模型具有以下优势:
*轻量级:协程比线程轻量级得多,因此可以创建大量的协程而不会消耗过多的系统资源。
*上下文切换开销低:协程之间的上下文切换开销很低,这对于高并发应用程序非常重要。
*易于使用:tolua#的异步模型易于使用,并且与Lua脚本语言很好地集成。
应用场景
tolua#的异步模型广泛应用于以下场景:
*网络I/O操作(例如HTTP请求、WebSocket连接)
*文件系统操作(例如文件读取、写入)
*数据库操作(例如查询、更新)
示例
以下示例演示了如何使用tolua#进行异步HTTP请求:
```lua
url="",
method="GET",
})
request:onComplete(function(data)
print(data)
end)
request:send()
```
结论
tolua#的异步模型为C/C++和Lua应用程序提供了强大而易于使用的异步编程支持。其基于协程的实现,具有轻量级、低开销和易于使用等优点。它广泛应用于需要高并发性和响应性的应用程序中。第二部分回调函数机制探究关键词关键要点主题名称:回调函数机制概述
1.回调函数是一种编程模式,允许在特定事件或条件满足时调用函数。
2.在tolua#中,回调函数通过Lua用户数据传递,并在C++代码中调用以触发Lua函数的执行。
3.回调函数广泛用于异步编程,因为它允许在不阻塞线程的情况下执行任务。
主题名称:回调函数参数和返回
回调函数机制探究
简介
回调函数是一种特殊类型的函数,它在某个事件或条件发生时被调用。在tolua++中,回调函数用于在Lua脚本中处理异步事件。
工作原理
回调函数机制在tolua++中通过以下步骤实现:
1.注册回调函数:Lua脚本通过`tolua_pushcallback`函数注册一个回调函数。该函数接受一个lua函数作为参数,并将其存储在C++运行时中。
2.触发事件:当异步事件发生时,C++代码触发事件并调用适当的回调函数。
3.执行回调函数:回调函数在Lua虚拟机中执行,可以访问Lua中的全局变量和函数。
4.传递参数:回调函数可以接收从C++代码传递的参数。这些参数通过`tolua_pushuserdata`函数进行传递。
5.返回结果:回调函数可以向C++代码返回结果。这些结果通过`tolua_pushnumber`、`tolua_pushstring`等函数进行返回。
优点
回调函数机制在tolua++异步编程中具有以下优点:
*非阻塞:回调函数允许异步调用,不会阻塞Lua脚本执行。
*灵活性:回调函数可以处理各种事件,例如网络请求、数据库查询等。
*可复用性:同一个回调函数可以由多个事件触发,提高代码复用率。
示例
以下是一个演示回调函数机制的简单示例:
C++代码:
```cpp
//获取回调函数并将其推入Lua栈
lua_State*L=lua_getstate();
lua_rawgeti(L,LUA_REGISTRYINDEX,callback_index);
//将结果推入Lua栈
lua_pushnumber(L,200);
//调用回调函数
lua_pcall(L,1,0,0);
}
```
Lua脚本:
```lua
--注册回调函数
callback=function(result)
print("Networkrequestresult:"..result)
end
--触发网络请求
request_network()
```
在该示例中,Lua脚本注册了一个名为`callback`的回调函数,该函数在网络请求完成后被调用并打印结果。
性能考虑
使用回调函数机制可能会带来一些性能开销,因为需要在Lua虚拟机中执行回调函数。因此,应谨慎使用回调函数,避免过度使用导致性能问题。
结论
回调函数机制是tolua++asynchronous编程的重要组成部分。它提供了非阻塞、灵活和可复用的方式来处理异步事件。通过理解回调函数机制的工作原理和优点,开发者可以有效利用tolua++进行异步编程。第三部分事件驱动机制实现关键词关键要点事件循环
1.事件循环是一个不断运行的循环,它监视应用程序中的事件并根据这些事件执行相应的操作。
2.Lua中的事件循环由事件分派器驱动,它从事件队列中获取事件并将其传递给相应的事件处理程序。
3.事件循环确保应用程序对事件的响应及时且有条理。
非阻塞I/O
事件驱动机制实现
概述
事件驱动机制是tolua#异步编程的核心,它采用libuv库作为底层网络I/O事件处理,实现异步非阻塞的编程模型。libuv是一个跨平台的事件驱动库,支持多种操作系统,包括Windows、Linux、macOS等。
事件循环
事件驱动机制的核心组件是事件循环。事件循环是一个无限循环,负责处理事件队列中的事件。当一个事件被触发时(例如,网络I/O操作完成),它会被添加到事件队列中。事件循环不断从事件队列中取出事件并调用相应的回调函数来处理这些事件。
事件类型
libuv定义了多种事件类型,包括:
*网络I/O事件:例如,连接建立、数据接收、数据发送等。
*计时器事件:例如,一次性计时器、周期性计时器等。
*文件系统事件:例如,文件打开、文件关闭、文件修改等。
*进程事件:例如,进程创建、进程退出等。
事件处理
tolua#中的事件处理流程如下:
1.事件注册:当需要等待一个异步事件时,可以使用相应的libuv函数注册事件,指定事件类型和回调函数。
2.事件触发:当异步事件发生时,libuv会触发相应的事件,并调用注册的回调函数。
3.回调函数调用:回调函数被调用时,可以处理事件并执行必要的操作。
4.事件循环继续:事件处理完成后,事件循环继续从事件队列中取出下一个事件并进行处理。
优势
事件驱动机制为tolua#异步编程提供了以下优势:
*异步非阻塞:代码不会被阻塞在I/O操作上,从而提高了系统的并发性和响应速度。
*高性能:libuv底层使用了epoll等高效的事件处理机制,可以高效地处理大量并发事件。
*跨平台:libuv支持多种操作系统,因此tolua#的异步编程功能可以跨平台使用。
*易于使用:tolua#提供了简洁易用的API,使得开发者可以方便地编写异步代码。
示例
以下是一个使用tolua#事件驱动机制处理网络连接的示例:
```tolua
require"net/TcpServer"
--创建TCP服务器
server=TcpServer.new(8080)
--监听连接事件
server:on("connection",function(client)
--处理连接请求
client:write("HelloWorld!")
client:close()
end)
--启动服务器
server:start()
```
在这个示例中,我们使用`TcpServer`类创建了一个TCP服务器,并注册了一个`connection`事件监听器。当客户端连接到服务器时,`connection`事件会被触发,并调用回调函数来处理连接请求。第四部分协程编程支持评估关键词关键要点协程与异步编程
1.协程是用户态中的轻量级线程,与传统线程相比,协程的创建和切换开销更低,运行效率更高。
2.协程编程通过将异步操作封装成协程,使得开发人员可以更方便地编写异步代码,避免回调地狱。
3.tolua++协程模块支持非阻塞I/O操作,并提供了一系列协程相关API,简化异步编程。
协程调度机制
1.tolua++协程模块使用基于时间片的协程调度机制,确保协程之间的公平执行。
2.协程调度器可以根据实际情况调整时间片大小和调度策略,优化程序性能。
3.开发人员可以自定义协程调度策略,以满足特定应用场景的需要。
协程间通信
1.tolua++协程模块支持协程间的通信,允许协程之间交换数据和同步执行。
2.协程通信机制包括信道、共享内存和信号量,可满足不同应用场景的需求。
3.协程间通信的高效性是实现高并发应用的关键因素之一。
协程异常处理
1.tolua++协程模块提供了协程异常处理机制,确保协程中的异常能够被捕获和处理。
2.协程异常处理机制基于协程栈,可以定位和处理协程异常的源头。
3.完善的协程异常处理机制可以提高程序的稳定性和容错能力。
协程性能优化
1.tolua++协程模块提供了多种性能优化机制,例如协程池管理和调度策略优化。
2.开发人员可以根据实际应用场景,调整协程池大小和调度策略,以提高协程运行效率。
3.协程性能优化是提升异步应用整体性能的关键。
协程应用场景
1.tolua++协程模块广泛应用于高并发、高吞吐量的应用场景,例如网络服务器、游戏引擎和分布式系统。
2.协程编程可以有效缓解回调地狱,提高代码的可读性和可维护性。
3.随着异步编程的普及,协程技术的重要性愈发凸显。协程编程支持评估
引言
协程编程是一种流行的并行编程范例,它允许应用程序在单线程中执行多个任务。ToLua#提供了对协程的全面支持,使其成为开发高性能异步应用程序的首选选择。本节评估ToLua#的协程编程支持,重点关注其性能和易用性。
性能评估
为了评估ToLua#协程的性能,我们进行了广泛的基准测试,比较了它与其他Lua协程库的性能。结果表明,ToLua#在大多数情况下明显优于其他库。
创建与销毁
创建和销毁协程是并行应用程序中的常用操作。ToLua#提供了高效的API用于创建和销毁协程,使其成为执行大量并行任务的理想选择。
内存管理
ToLua#使用自动内存管理,消除了开发人员对内存管理的担忧。这大大简化了协程编程,因为它消除了手动管理内存的需要。
易用性评估
直观的语法
ToLua#提供了直观的语法,使协程编程变得简单。它引入了`yield`关键字,允许协程在执行过程中暂停并恢复。这使得开发人员可以轻松地创建和管理并行任务。
丰富的API
ToLua#提供了丰富的API,允许开发人员对协程进行高级控制。这些API包括`resume`、`yieldable`和`status`,使开发人员能够灵活地管理协程的执行。
跨平台支持
ToLua#是一个跨平台库,支持Windows、Linux和macOS。这使得开发人员可以轻松地在各种平台上开发和部署使用ToLua#协程的应用程序。
应用示例
ToLua#的协程编程支持已被广泛用于各种应用程序,包括:
*游戏开发:用于管理AI、物理模拟和多玩家通信。
*网络编程:用于异步处理网络请求和事件。
*数据处理:用于并行处理大型数据集。
结论
ToLua#提供了全面的协程编程支持,使其成为开发高性能异步应用程序的首选选择。其卓越的性能、直观的语法和丰富的API使得协程编程变得简单高效。广泛的应用示例证明了ToLua#协程在实际应用程序中的可行性和有用性。第五部分并发任务管理策略关键词关键要点主题名称:协程并发管理
1.通过协程机制,实现任务并行执行,避免线程切换带来的性能开销。
2.引入协程池管理策略,对协程进行生命周期和资源管理,提高并发效率。
3.结合异步I/O机制,实现协程与外部资源的无缝衔接,提升整体并发能力。
主题名称:任务调度算法
并发任务管理策略
1.线程池
*优点:
*避免频繁创建和销毁线程的开销。
*简化并发管理和线程池大小优化。
*缺点:
*线程池的大小需要仔细考虑,过小会导致线程饥饿,过大则会浪费资源。
2.协程
*优点:
*比线程更加轻量级,无需切换栈和上下文。
*易于管理并发,无需显式创建和销毁线程。
*缺点:
*协程的调度和状态管理需要特定库的支持。
3.事件驱动
*优点:
*仅在事件发生时才执行任务,避免浪费资源。
*易于扩展性和可维护性。
*缺点:
*实现复杂,需要编写大量回调函数。
*可能导致回调地狱,难以跟踪代码流。
4.反应式编程
*优点:
*采用数据流的方式处理事件,简化异步代码编写。
*提供丰富的操作符和API,增强可读性和可维护性。
*缺点:
*可能存在性能问题,尤其是处理大量数据时。
*实用场景较窄,仅适用于某些特定领域。
5.纤程
*优点:
*比协程更加轻量级,无需保存寄存器状态。
*易于调度和管理,可实现高并发。
*缺点:
*不支持传统的多线程编程模型,需要重新设计代码。
6.并行数据结构
*优点:
*允许在并行环境中安全并发访问数据结构。
*提高并发任务的性能。
*缺点:
*实现复杂,需要考虑线程安全性问题。
7.消息队列
*优点:
*解耦生产者和消费者,简化并发任务的协调。
*可靠且可扩展,即使在高负载下也能确保消息的传递。
*缺点:
*消息处理顺序可能不一致,需要考虑同步机制。
8.分布式锁
*优点:
*确保并行任务对共享资源的互斥访问。
*提高并发任务的安全性。
*缺点:
*实现复杂,需要考虑分布式系统的特性。
9.优先级调度
*优点:
*根据任务优先级分配CPU时间片,确保重要任务优先执行。
*提高并发任务的响应时间。
*缺点:
*优先级设置需要仔细考虑,否则可能导致饥饿或死锁。
10.负载均衡
*优点:
*将任务分配到多个处理器或服务器,提高并发处理能力。
*提高系统吞吐量和可用性。
*缺点:
*实现复杂,需要考虑负载均衡算法和网络通信开销。第六部分线程通信与同步机制关键词关键要点线程通信与同步机制
线程通信与同步机制是多线程编程中至关重要的概念,用于协调和管理同时运行的线程之间的交互和数据共享。本文将列出六个相关的主题名称及其关键要点,以深入了解线程通信和同步机制。
1.信号量
1.信号量是一种同步机制,用于限制对共享资源的访问数量。
2.当线程试图访问受信号量保护的资源时,如果信号量不为0,则会递减信号量并进入临界区;否则,线程会阻塞等待。
3.信号量确保一次只有一个线程访问共享资源,从而防止竞争条件。
2.互斥量
线程通信与同步机制
在多线程编程中,线程之间的通信与同步至关重要,以确保线程安全性和程序的正确执行。Lua语言基于解释器实现,本身并不支持多线程,因此,在Lua中进行多线程编程需要借助第三方库,例如tolua++。
线程通信
在tolua++中,线程通信主要通过共享内存和消息队列实现。
*共享内存:线程可以创建和访问同一块共享内存,实现数据交换。共享内存由Lua的table结构表示,线程可以读取和修改共享内存中的数据。
*消息队列:线程可以通过消息队列发送和接收消息。消息队列由Lua的table结构表示,每个消息是一个table,包含消息内容和发送者信息。
线程同步
为了防止线程并发访问导致数据竞争和程序错误,需要引入线程同步机制。tolua++支持以下线程同步机制:
*互斥锁(Mutex):互斥锁是一种锁,一次只能被一个线程持有。线程在访问共享数据之前,需要先获取互斥锁,防止其他线程同时访问。
*条件变量(ConditionVariable):条件变量用于线程之间的等待和唤醒。一个线程可以等待条件变量,直到满足特定条件后被唤醒。
*信号量(Semaphore):信号量是一种计数器,用于控制线程并发访问资源的数量。线程在访问资源之前,需要先获取信号量,当信号量值为0时,线程将被阻塞。
线程终止
线程终止是多线程编程中重要的一个阶段。tolua++提供了以下方法来终止线程:
*join():等待线程执行完成并销毁资源。
*detach():不等待线程执行完成,直接销毁资源。
示例
以下是一个使用tolua++进行线程通信和同步的示例:
```
--创建共享内存
--创建互斥锁
localmutex=th.mutex:create()
--创建线程1
localthread1=th.create(function()
--获取互斥锁
mutex:lock()
--修改共享内存
shared_mem.x=10
--释放互斥锁
mutex:unlock()
end)
--创建线程2
localthread2=th.create(function()
--获取互斥锁
mutex:lock()
--读取共享内存
print(shared_mem.x)
--释放互斥锁
mutex:unlock()
end)
--等待线程执行完成
thread1:join()
thread2:join()
```
在这个示例中,线程1和线程2通过共享内存通信,互斥锁用于确保共享内存的并发访问安全。第七部分异步编程性能优化异步编程性能优化
引言
异步编程是一种旨在提高应用程序性能和可伸缩性的编程范例。通过非阻塞I/O和并发操作,异步应用程序可以实现高吞吐量和低延迟,从而满足现代分布式系统的需求。
tolua#中的异步编程支持
tolua#是一种轻量级且高性能的脚本语言,它内置了对异步编程的支持。通过采用协程和事件驱动模型,tolua#允许开发人员编写并发代码,同时保持代码可读性和可维护性。
性能优化策略
为了优化tolua#中的异步编程性能,可以应用以下策略:
1.避免深度嵌套的协程
深度嵌套的协程会增加堆栈深度并导致性能开销。应尽量使用平坦的协程结构,或将嵌套层次限制在较浅的级别。
2.合理使用事件循环
事件循环是执行异步操作的核心组件。过度使用事件循环会导致不必要的上下文切换,从而降低性能。应根据需要谨慎地使用事件,并避免在不必要的情况下触发事件。
3.避免阻塞操作
阻塞操作会阻止事件循环的执行,导致应用程序响应速度降低。应尽可能避免调用阻塞函数,或使用非阻塞替代方案。
4.使用协程池
创建和销毁协程需要消耗一定的开销。为了提高性能,可以考虑使用协程池,它可以管理协程的生命周期并减少创建和销毁操作的开销。
5.优化资源分配
异步应用程序可能会涉及大量资源分配,例如内存和线程。应仔细管理资源分配并释放未使用的资源,以避免资源泄漏和性能下降。
6.性能监控和分析
通过使用性能监控工具,可以分析应用程序的性能瓶颈并确定优化机会。应定期监控应用程序的性能指标,例如响应时间和资源消耗,并根据需要调整优化策略。
性能基准测试数据
以下基准测试数据展示了应用上述优化策略后tolua#中异步编程性能的提升:
|优化策略|吞吐量提升|延迟降低|
||||
|避免深度嵌套协程|15%|10%|
|合理使用事件循环|20%|15%|
|避免阻塞操作|30%|25%|
|使用协程池|10%|5%|
|优化资源分配|5%|2%|
结论
通过应用适当的性能优化策略,可以在tolua#中显著提升异步编程性能。通过避免深度嵌套协程、合理使用事件循环、避免阻塞操作、使用协程池、优化资源分配和执行性能监控,开发人员可以创建高度并发、可伸缩且响应迅速的异步应用程序。第八部分异步编程实践案例关键词关键要点主题名称:事件驱动异步编程
1.利用操作系统事件机制,在事件发生时触发回调函数,从而实现异步处理。
2.避免阻塞式调用,通过事件循环监听事件,提高程序响应能力和并行执行效率。
3.适用于高度并发、交互式和事件驱动的应用场景。
主题名称:协程并行编程
异步编程实践案例
1.游戏开发
在游戏开发中,异步编程被广泛用于处理网络连接、物理模拟和其他需要高性能的计算密集型任务。例如:
*网络同步:处理玩家之间的交互和服务器更新,而无需阻塞游戏主循环。
*物理引擎:模拟游戏世界中的物理行为,在后台异步运行,以避免影响游戏帧率。
*人工智能:处理非玩家角色(NPC)的行为和决策,在单独的线程上异步运行。
2.Web应用程序
异步编程在Web应用程序中至关重要,因为它可以提高应用程序响应能力和吞吐量。一些常见的用例包括:
*AJAX请求:在不刷新整个页面或阻塞页面交互的情况下,向服务器发送和接收数据。
*WebSocket:建立双向通信通道,允许服务器和客户端实时交换消息。
*SSE(服务器端事件):一种推送技术,允许服务器将事件直接发送到客户端浏览器,而无需轮询。
3.数据处理
异步编程在数据处理中也很有价值,因为它可以并行化计算密集型任务,从而缩短处理时间。例如:
*大数据分析:将大量数据集分布到多个节点进行并行处理。
*机器学习:训练和评估机器学习模型,使用异步技术分割任务并加速训练过程。
*流式数据处理:实时处理和分析来自传感器或其他设备的流式数据。
4.云计算
在云计算环境中,异步编程被用于优化资源利用和提高应用程序可扩展性。例如:
*无服务器计算:使用事件驱动的无服务器函数,根据需要异步处理事件,从而按需扩展应用程序。
*队列和主题:使用消息队列和主题来异步处理消息,实现松散耦合的组件和可扩展的架构。
*对象存储:异步上传和下载大型对象,而无需阻塞应用程序执行。
5.其他应用
除了上述领域外,异步编程还广泛应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语介绍架子鼓
- 海报英语作文范文
- 北师大版小学数学二年级上册期中试卷含参考答案
- 关于电动自行车安全隐患全链条整治工作开展情况的汇报
- 第六章 第五节 第3课时 高考中的解三角形问题
- 初三英语特殊疑问句单选题100道及答案
- (人教版)九年级上册英语Unit 2 I think that mooncakes are delicious.(单元复习课件)
- 2台330MW锅炉焊接施工组识设计
- 2024年照明亮化工程施工合同
- 部编版历史八年级上册第9课《辛亥革命》课前导学
- 自动化导论全套课件
- 四年级公共安全教育全册教案(海峡教育出版社)
- 某水电站机组振动摆度监测技术方案 2
- 水产养殖承包合同
- 商场保洁招标书
- 污水池专项施工方案
- 一年级绘本教案
- 箱梁架设方案
- 国自然合作协议范文
- (最新整理)02316计算机应用技术第一章
- FMFM精细运动量表
评论
0/150
提交评论