我想对比ejb3注入和jndi查找方法,注入是否将一个特定的代理实例绑定到servlet??如果是这样,那么在集群环境中,这种紧密的运行时绑定可能会导致效率低下。对于无状态,EJB代理与其支持实例(通常是池)是1对多的,并且可以安全地注入servlet
对于Singleton,EJB代理与其支持实例是1对1的,但是容器(或bean)负责确保并发调用是安全的还是不允许的,这取决于每个方法的业务逻辑@AccessTimeout可用于控制等待锁定的时间
对于有状态,EJB代理与其支持实例是1对1的,并
我的问题有点理论性
首先,我们有并发对象和一致性层次结构的定义。一致性层次结构使用一致性编号对并发对象进行分类
但我想问的是,具有相同共识数的对象是否可以相互实现。事实上,我知道答案是错误的。但是你能举一些例子吗,或者这是否意味着共识层次结构中有更精细的结构?有一种通用算法,它接受n个共识对象,并使用它们实现任意串行指定对象(特别是其他对象)的免等待n线程版本
因此,根据定义,如果一个对象具有一致性编号n,那么它可以实现无等待n线程一致性对象,它可以替代地(使用上述算法)实现另一个对象的无等待n
你好,埃尔兰格斯的同胞们:)
这只是另一个玩Erlang语言的爱好者。我有一个非常简单的YAWS应用程序模块,当被单个客户端访问时,它可以正常工作。但是,当我尝试生成多个并发客户机时,其中一些客户机开始接收错误(即使这些客户机的数量非常少,比如10个)。知道是什么引起的吗
说明代码:
应用程序模块
out(Arg) ->
io:format("got something!\n"),
Method = extract_method(Arg),
handle(Method, Arg
我们正在构建一个基于web的应用程序,它需要在非常高的并发性环境中支持大量用户。用户将试图同时更改同一记录。就数据库中的数据量而言,我们预计数据量将非常低(我们不打算构建下一个Facebook),相反,我们需要为每个用户提供非常快速的周转时间,以满足每个请求,因此从数据库的角度来看,我们需要一个解决方案,该解决方案在添加更多用户和记录时可以非常轻松地扩展
我们目前正在研究关系数据库和基于对象的数据库,以及分布式数据库系统,如Cassandra和Hypertable。与商业解决方案相比,我们更喜欢
我试图证明生产者/消费者问题的以下解决方案不起作用,通过表明当消费者在M1开始时,有一种情况是它无法在有限的时间内将某个项目出列,和/或有一种情况是生产者在L2开始时,而且它将无法在有限的时间内将项目排队。我只是找不到任何例子来证明这一点
该算法假设有10个生产者、10个消费者和10个缓冲区大小
nf = 0; // counting semaphore, # of items in queue
bm = 1; // binary semaphore, ensures mutex
制作人
L1
我想知道如何获得clojure中频道的大小。
我用count尝试过,但不受支持。
Clojure文档通常很好,但这次我找不到任何关于它的内容
示例:
(def channel1 (chan 3))
(println(count channel1))
Should be 3 but throws "count not supported on this type: ManyToManyChannel"
我找到了解决办法
(.buf (.buf ch)) ;; Get elements in
您好,我正在寻找dart中的等效产品,请告诉我是否有其他方法可以在dart中实现这一点。在dart中不需要这样做。Dart是单线程的,所有更新都是原子的。Dart中不需要这样做。Dart是单线程的,所有更新都是原子的
比方说,我有topicA、topicB和topicC,它们都是基于域实体,由单独的事件类型分隔的主题。topicA仅与eventA一起运行,topicB保留eventB,topicC仅与eventC一起运行。所有事件按业务域相互关联,但由单独的微服务生成,并且应按特定顺序处理
问题是,如何使用ApacheKafka按特定顺序引入消费事件,eventA然后等待接收eventB,然后在eventC接收时消费所有事件
感谢您的反馈,欢迎提出任何问题
一些注意事项:
Kafka Streams是一个很好
实现该协议需要两个双向通道,这似乎有些奇怪。难道我们不能只使用一个通道,并改变服务器循环,以提供和接受该通道吗。请注意,这在Hopac中是允许的,不会造成任何问题。作业无法在单个同步操作中使用通道向自身发送消息。解释如果只有一个通道而不是单独的getCh和putCh通道,会出现什么问题。提示:考虑有多个客户端的情况。
以上内容来自
是否真的期望新用户在这段旅程中理解库实现的更细微之处?我更喜欢文档给出答案而不是提出问题。为什么对take和get使用单一通道是个坏主意
module HopacEx
我了解数据流编程的基础知识,并在Groovy等中遇到过一些。我知道它在Io等语言中很流行(尽管我没有研究过Io)
我缺少的是一个令人信服的理由,即在构建并发程序时,将数据流作为一种范例来关注。为什么我要使用一个数据流模型而不是一个可变的状态+线程+锁模型(爪哇、C++等常见的)或者一个参与者模型(Erlang或Scala中常见的)或者其他什么东西?
特别是,虽然我知道上述语言(以及Scala和Ruby)中的库支持,但我不知道有哪个程序或库是此模型的典型子用户。谁在用它?为什么他们发现它比我提到的
我有两个应用程序在我的机器上运行。一个应该交作业,另一个应该做作业。如何确保第一个应用程序/进程处于等待状态。我可以通过其消耗的资源进行验证,但这并不保证。我应该使用什么工具?您可以使用命名管道-第一个应用程序将从中读取,但它将为空,因此它将继续等待(被阻止)。第二个应用程序将在希望第一个应用程序继续时写入 您的两个应用程序应该进行通信。有很多方法可以做到这一点:
通过套接字发送消息。这样,如果使用普通网络套接字而不是本地套接字,则这两个进程可以在不同的计算机上运行
如果您使用的是C,那么就可
在讨论创建singleton实例时有关种族条件的singleton和threadsafe问题时,我们讨论的是哪个线程
以这个为例,假设我有一个使用单例的MyApp
class MyApp
{
MySingleton oneAndOnly;
int main() // application entry point
{
oneAndOnly = MySingleton::GetInstance();
}
void SpawnThreads
请告诉我一些情况
实时系统如何定义事件同时发生?
1.当他们发生的时候?
2.在发生的时间范围内
提前谢谢 您应该看看算法,它们可以完美地处理连续集成的并发事件
启用OT的系统能够接受时间并发事件,并在必要时转换这些事件,以便服务器和所有客户端中的状态聚合
或者换句话说,它能够管理由于网络延迟而导致的客户机“分歧”,并使所有客户机和服务器以相同的状态完成,并以定义良好的顺序应用“操作”
GoogleWave是一个使用OT进行并发编辑的系统示例,您可以看到一个关于GoogleWave如何处理OT的
我想在rust中实现多路复用器/解多路复用器。它应该通过一个单独的“下游”DuplexStream发送多个“上游”DuplexStream的数据,只需将上游DuplexStream的port_num标识符预先添加到数据包中即可。当然,这也应该反过来工作:从从下游接收的数据包中读取port_num,并将其发送到正确的上游流
我开始实现这样一个MultiplexStream(下面的代码不会编译)。然而,我面临一个问题:
将port\u num映射到相应上游DuplexStream的open\u po
我有一个网站在这个网站用户做交易。
当用户进行成功交易时,请返回我的站点。
我只是在检查服务器通信的同时,用户已经刷新了多次,用户得到了多次金钱
PHP中是否存在并发管理
或者任何解决方案您使用的是什么支付解决方案?在任何处理付款的生产环境代码中,您都不希望更新信息的代码来自该网站的用户重定向。您希望为每个事务使用IPN系统和唯一的密钥,以确保所有数据都有效并且只提交一次。如果您没有使用外部支付处理程序,那么您将希望为发生的每个交易分配一个唯一的密钥,并根据您的数据库进行检查,以确保每个交易只添
这个例子取自。它运行并给出正确答案,但它显示以下运行时错误:“致命错误:所有goroutines都处于休眠状态-死锁!”。有人能帮我理解为什么会这样吗?
包干管
import (
"fmt"
)
func gen(nums ...int) <- chan int {
out := make(chan int)
go func() {
for _, n := range nums {
out <- n
}
这是一个冗长的问题。它是关于卡桑德拉模式设计的。我来这里是为了从你们尊敬的专家那里得到我正在研究的一个用例的信息。欢迎所有意见、建议和批评。我的问题来了
我们想收集用户对我们即将发表的一些论文的评论。对于每一篇论文,我们寻求3个评论。但我们会向3*2=6个用户发出评论邀请。所有6个用户都可以向我们的系统提交他们的评论,但只计算前3个;前三名评论员将获得工作奖励
在我们的Cassandra数据库中,有三个表:用户、论文和评论。用户表和纸质表很简单:每个用户对应于用户表中具有唯一用户ID的一行;同样
我想做一帮探员。就个人而言,我们可以做到:
(def myAgent (agent 3))
但是,如果我想创建很多代理,如何在匿名函数中为代理分配名称和值?我有这个:
(def agents (vec (map agent (range 0 50)) ))
这就产生了50个代理,但没有一个有价值。当我尝试匿名函数时:
(def agents (vec (map (fn [x] (def x (agent 3)) (range 0 50)) ))
它不起作用。任何帮助都将不胜感激。创建一个包
我有一个列表,还有一个谓词。实际上,这是一个很长的列表,谓词需要一段时间。我只想输出满足谓词的列表元素
我可以访问很多CPU内核,所以我认为尝试以块为单位并行测试列表中的元素是有意义的
我试过的东西:
[concurrent\]maplist不起作用
看起来应该很容易。似乎是maplist的简单并发版本
根据我的建议,maplist/3应该完全按照我的要求来做。对于SWI的maplist/3建议,其行为可能与答案中所述不符,但在评论中,答案的作者建议这是文档中的一个问题,它确实应该按预期工作
这
我知道,当并没有消息要处理时,参与者不会使用线程,只有在消息到达时才会将自己附加到线程。然而,我的问题是,当一个参与者连接到一个线程时,它是什么类型的线程——用户线程还是本机OS线程
我想基本上了解一下,如果actor中有一些阻塞代码,比如一些I/o调用或等待web服务的响应,会发生什么?线程是否会保持阻塞状态,或者线程将被释放并可供其他参与者使用?据我所知,如果它是本机线程,那么它将被阻塞。但是,如果它是用户线程,则本机线程可能不会被阻止。参与者主体中的IO操作将阻止当前线程
Cassandra是否能保证并发写入时副本的一致性?例如,如果N=3,W=3,并且有3个并发写入程序,那么每个副本上是否可能有3个不同的值
这是一个卡桑德拉特有的问题,还是规范的发电机设计也有这个问题,尽管它使用了矢量时钟 Cassandra在这种情况下使用客户机提供的时间戳,以确保每个副本保持“最新”值。在您的示例中,当您写入每个副本时,即使副本以不同的顺序接收写入,它们也会使用随写入一起提供的时间戳来决定保留哪一个。将具有旧时间戳的同一密钥写入副本将被忽略
这种机制不仅仅用于处理并发写操作—
是否可以使用CUDA或其他工具在GPU上运行openMP程序
我有一个并发程序,但我的计算机只有两个内核
我需要在8个或更多内核上测试程序
谢谢你的帮助 有一种类似于OpenMP的方法,尽管它当然适用于CPU+GPU非常不同的不对称情况
但是,如果您的目的是测试OpenMP代码,那么答案肯定是否定的。您不能使用相同的程序,而且它也不会以相同的方式执行
您最好的选择可能是执行OMP_NUM_THREADS=8的OpenMP程序,即使只有2个内核可用,它也会启动8个线程。不过,某些方面(例如锁争用)
标签: Concurrency
database-replicationconsistencypaxossnapshot-isolation
我想知道基于Paxos的复制方案与不同并发模型(如快照隔离)之间的实际关系是什么。有谁能解释一下这两者之间的关系,并且只举几个实际例子吗?快照隔离是一个很强的一致性并发标准,因为它完全命令冲突的更新。在分布式系统中,总阶数等价于一致性。Paxos是一种在具有进程故障的分布式系统中实现一致性的解决方案。因此,您的问题的答案是:快照隔离和基于Paxos的复制方案之间的关系是,从理论上讲,它们应该同样难以实现(即,在相同的假设下是可能的)
强一致性并发标准的其他示例有序列化性、线性化性和顺序一致性。相
在阅读ArrayBlockingQueue的源代码时,我发现一条评论,解释它使用了“任何教科书中都可以找到的经典双条件算法”:
为什么它使用经典的双条件(notEmpty,notFull)算法?您已经有了很好的评论。只是作为补充
ArrayBlockingQueue是一个状态相关类。这意味着该类具有只能在某些前提下执行的操作
仅当前提条件(notFull)为false时,写入线程才会等待
//如果队列已满,则写入程序需要等待
//原子地释放锁并等待信号(读取器触发的notFull.signal(
我在Go中进行一些流处理,但我一直在试图找出如何在没有锁的情况下以“Go方式”进行处理
这个人为的例子说明了我面临的问题
我们一次只能得到一件东西
有一个goroutine将它们缓冲到一个名为things的片中
当things变满len(things)==100时,会以某种方式对其进行处理并重置
有n个并发goroutine需要在其满之前访问内容
从其他goroutine访问“不完整的”内容是不可预测的
doSomethingWithPartial和doSomethingWithComplet
我读过和,但我仍然对ref set的工作原理感到困惑。(在某种程度上,这两份文件让我相信了两件不同的事情……)
假设我在Clojure中有一个如下所示的事务:
(def flag (ref false))
(dosync
(long-computation-that-does-not-read-or-write-flag)
(ref-set flag true))
假设在长计算的中间,有人修改标志。当我尝试引用设置标志时,这会导致我的事务重试吗
我可以想象答案可能是肯定的,因为
我正在开发一个Sinatra JRuby应用程序,处理一个并发API调用到达API层,然后由服务和适配器层处理的情况。我有一个GlobalService模块来共享公共信息,这样我就可以从任何其他层访问这些公共信息。在并发调用到来并重置先前API的值之前,这一切都很正常。虽然我已经实现了互斥来解决这个问题,但我有一种直觉,这不是解决这个问题的正确方法。以下是我实施的内容:
require 'thread'
module GlobalService
@@mutex = Mutex.new
我是水晶的初学者。
我有个问题,也许有人能帮我
我使用凯末尔框架。
有以下代码:
require "kemal"
require "json"
channel = Channel(Card).new
post "/posts" do |env|
json = JSON.parse(env.request.body as String)
url = json["url"].to_s
spawn do
# Slow process
page = Scraper.n
我在大学里有关于当前编程的教程。
我的任务是编写一个基于信号量的程序,其中
将计算两组数字的差值。我不知道在哪里
并行编程是必要的。我知道CP是关于
使用相同的数据资源,但在哪个阶段我应该使用两个
线程和信号量。信号量用于保存某些进程,这些进程
可能会干扰其他进程使用的数据。我就是不知道
看到了
有什么想法吗?输入集是只读的,因此您的多个线程不会互相攻击(内存总线争用除外),但您需要在线程写入结果集中时同步线程。输入集是只读的,因此您的多个线程不会互相攻击(除了内存总线争用),但是在线程写入结果
标签: Concurrency
semaphoredining-philosopherbinary-semaphore
这个伪代码能以最大的并行性解决这个问题吗?这里的mutex是一个初始化为1的二进制信号量。假设叉的编号范围为0到(N-1)。总共有N个哲学家,编号从0到(N-1)
这将以最大的并行性解决哲学家进餐问题,因为在一个哲学家获得两个叉子后,锁将被释放。但会吗?会不会有生动活泼的问题?我很困惑。为了回答你的问题,我想提供一些事件的线索,这些事件似乎将你的哲学家带入了一种不受欢迎的状态
考虑一个系统,其Ph值(0),…,Ph值(N-1)为N>2,且动作顺序如下:
Ph(1).think();
Ph(0).
我有以下工作机构:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
with Ada.Task_Identification; use Ada.Task_Identification;
package body pkg_task is
task body task_t is
activationTime : Time_Span := 1; -- 1 second
给定一个可观察的函数和一个昂贵但需要可变时间的映射函数函数,是否有方法在多个输入上并行调用映射函数,并按生成顺序接收输出
我已尝试将observeOn()与多线程调度程序一起使用:
PublishSubject输入=PublishSubject.create();
函数mf=。。。
观察者myObserver=。。。
//注意:与newFixedThreadPool(2)的结果相同
Executor exec=Executors.newWorkStealingThreadPool();
//使用
我在Kamailio中使用伪变量$var,因为根据文档,它们比$dlg_var快,但我想知道这样使用它们是否安全:
jansson_get("a", $http_rb, "$var(a)");
$var(i) = 0;
jansson_array_size("elements", $http_rb, "$var(elements_size)");
while($var(i) < $var(elements_size)) {
jansson_get("elements[$var(
Erlang使用参与者之间的消息传递作为其并发模型
假设我有3名销售物品的参与者。项目总数为7项他们如何销售7种商品?他们如何协调?我们可以有一个拥有可用物品数量的参与者,对“购买”消息进行操作(库存参与者)。这将是一个SPOF
在其他语言(如Java)中,当使用消息队列进行并发而不是锁时,并发性也是如此
(最好没有阿姆达尔瓶颈)这些演员是在真空中表演的吗?他们必须有7个买家或库存中的7个项目。也许排队的买家或库存商店应该协调他们。您有一个表示事物的流程,在本例中是一个库存。当其他流程想要购买时
我有一个SQLite数据库,我正在进程A中保持打开和写入。我希望能够从进程B以只读方式使用它
根据,
如果数据库被解锁,则数据库可能无法读取(或写入)-不合适
如果数据库是共享的,那么两个进程可以读取它,但第一个进程不能写入-
如果一个进程想要写入,它需要一个独占锁,这意味着没有其他进程可以写入-不合适的
进程A将进行大量的小写操作,因此我认为在每次事务提交时制作一个副本并不有效
我能看到它的唯一方法是让读卡器等待数据库进入解锁状态,在读取期间获得一个共享锁,然后释放它。同时,进程A将要写入
我有两个独立的昂贵功能。我想让它们并行运行。我不想处理期货之类的事情(我是Clojure的新手,很容易被弄糊涂)
我正在寻找一种同时运行两个函数的简单方法。我希望它能像下面那样工作
(defn fn1 [input] ...) ; costly
(defn fn2 [input] ...) ; costly
(let [[out1 out2] (conc (fn1 x) (fn2 y))] ...)
我想让它返回一个带有一对输出的向量。它应该只在两个线程终止后返回。理想情况下,conc应适用
似乎每个列都需要一个名称,并将按照您指定的名称所隐含的顺序存储
如果我不关心名称,只要它被附加到现有列上(这样它就会出现在插入时存在的所有列之后),该怎么办
实际上,我要求的是一个原子自动递增的列名,这样我就可以保证并发追加列的尝试不会互相影响,并且都出现在列列表的末尾(因此UUID名称不是我想要的)
用例实际上是一个日志(对于特定的键,所以我希望它保持在一个特定的行中),它相对很少更新,但可以同时完成。如果我只是使用时间戳作为列名,那么两次并发编辑使用相同的时间戳和数据丢失的可能性很小,这是我
我有一个容量测试来测试将PUT方法同时发送到不同位置(最多100-200个位置)的响应时间。我正在使用jmeter,我只是想知道是否有一种方法可以在jmeter中实现
测试-HTTP将同一文件同时放在不同位置(最多100-200个位置)。
示例-一次向不同位置发送5个以下请求(最多200个)
1. Put /location1/object1 File 1
2. Put /location2/object2 File 1
3. Put /location3/object3 File 1
4. P
我有一个简单的.NET4.5HttpHandler,它似乎不能扩展到10个并发请求。我期待一个更高的数字。处理程序只会休眠一秒钟并返回一个简单的字符串
concurrent requests requests/minute
1 60
8 480
9 540
10 600
11 600
12
如何通过最终一致性处理并发性?或者我可以问,如何通过最终的一致性来确保数据的完整性
通过CQR和事件源,最终一致性意味着您将域事件放入队列,并设置作为投影的事件处理程序。这些投影以异步方式更新读缓存。现在,如果使用该读缓存进行验证,则无法确保验证所基于的信息仍然有效。发送命令时,队列中可能存在未处理(或未投影?)的域事件,这可能会更改验证结果。所以这只是另一种并发类型。。。您认为如何处理这些罕见的并发问题?域事件已保存在存储中,因此您无法对其执行任何操作,您不能仅将其从事件存储中删除(因为它应该
我在研究Go并发模式
我不确定的一种模式是:菊花链
我很难理解代码的控制流
有人能给我解释一下吗
package main
import (
"fmt"
)
func f(left, right chan int) {
left <- 1 + <-right
}
func main() {
const n = 10000
leftmost := make(chan int)
right := leftmost
我有以下代码,使用goroutine和缓冲通道。我想知道我是否正确使用了频道
package main
import (
"errors"
"fmt"
"math/rand"
"runtime"
"time"
)
func random(min, max int) int {
rand.Seed(time.Now().Unix())
return rand.Intn(max-min) + min
}
func err1(rand in
考虑以下问题:
您的计算环境只有一个gpu和一个cpu。
在gpu上,您可以运行一个程序,在1e6浮点数组上执行计算。此计算步骤重复n次(过程1)。在每个计算步骤之后,我将数组从设备内存转移到主机内存。传输完成后,在CPU上调用串行算法分析数据(进程2)
这个程序连续工作。我想知道如何并行化进程1和进程2,以减少整个程序的运行时间。流程1必须等待流程2完成,反之亦然
我知道CUDA内核是异步调用的,并且我知道有固定主机内存的异步复制操作。但是,在这种情况下,我需要等待GPU完成,然后CPU才能开
如果一个函数read锁定读/写互斥锁两次,而另一个函数write锁定,然后write-un锁定同一互斥锁,则原始函数仍然挂起
为什么呢?这是因为互斥体允许代码执行的顺序是串行的吗
我刚刚通过删除第二行mu.RLock()解决了这样一个场景(我花了好几个小时才找到答案)。这是读写锁的几个标准行为之一。什么
sync的文档说明:
为了确保锁最终可用,阻塞的锁调用会排除新读卡器获取锁
否则,一系列读卡器(每个读卡器在上一次发布之前都获得了读锁)可能会无限期地耗尽写操作
这意味着在同一个goroutin
我试图理解监视器的概念
一个监视器中最多允许有多少个线程?使用监视器的程序指定的一个或一些数字
谢谢。监视器内最多只能有一个线程。此号码不能以任何方式更改
等待进入监视器的线程数和等待通知的线程数不受限制,或者更好地说,受线程总数的限制
JVM实例中的线程总数受底层O/S和可用核心内存量的限制
假设我们有某种发布/订阅协议。当有人正在连接和订阅时,我们可以将频道保存在地图、列表或频道组中:
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
super.channelActive(ctx);
log.debug("Client connected: {}", ctx.channel().remoteAddress());
clients.add(ctx
我有一个很大的CSV文件,其中包含独立的项目,需要花费相当多的精力来处理。我希望能够并行处理每个行项目。我在这里找到了一段用于处理CSV文件的示例代码:
代码是:
(use '(clojure.contrib duck-streams str-utils)) ;;'
(with-out-writer "coords.txt"
(doseq [line (read-lines "coords.csv")]
(let [[x y z p] (re-spl
我正在开发一个在JavaFX任务中使用多个工作线程的系统。任务内部这些线程上的可调用对象使用PropertyChangeSupport将某些状态更改信息传递回侦听器(例如,中间结果)。我正在使用PropertyChangeListeners监视这些更改,并从中创建其他对象可以访问的派生对象。任务完成后,我将使用JavaFX显示信息,其中一些信息是从发出的PropertyChange事件中收集的
我的问题是:在任务完成和处理PropertyChangeEvents之间是否存在竞争条件(我假设这会发
我有一个用MPI并行的Fortran程序。对于我知道的某个应用程序,我希望公平地运行该程序的2个实例,但不是完全相同的实例。这两个并发运行的程序必须在运行时相互通信
我认为最简单的方法之一是定义一个全局通信器,例如跨所有流程的MPI_COMM_WORLD_global。然后,我将继续重新定义通用的全局通信器MPI_COMM_WORLD,将其定义为该程序实例使用的进程总数。注意,尽管我提到了该程序的多个实例,但在这种情况下,只有一个实际程序在运行
我希望将MPI_COMM_WORLD保持为程序“t
假设我们有一个spinlock实现:
struct Lock {
locked : Atomic(bool),
}
然后,解锁功能可以是:
fun unlock(lock : &Lock) {
atomic_store(&lock.locked, false, release);
}
但是锁怎么办呢?通常,它使用如下比较和交换:
fun lock(lock : &Lock) {
while atomic_compare_and_swap(&am
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 33 页