如何在异步和线程中执行大量 sql 查询

问题:我有大量的 sql 查询 (大约 10 k-20 k),我想在 50 个 (或更多) 线程中异步运行它们。 我为这项工作写了一个 powershell 脚本,但是速度很慢 (执行所有脚本大约需要 20 个小时)。期望的结果是最多 3-4 小时。 问题:如何优化 powershell 脚本?我是否应该重新考虑并使用另一种技术python or c#? 我认为这是 powershell 的问题,因为当我检查时whoisactive查询执行得很快。创建、退出和卸载作业需要大量时间,因为每个线程都创建了单独的 PS 实例。 我的代码: $ NumberOfParallerThreads = dec; $ Arr _ all queries = @ ('exec [mystoredproc] @ param1 = 1,@ param2 = 2, 'Exec [mystoredproc] @ param1 = 11,@ param2 = 22', 'Exec [mystoredproc] @ param1 = 111,@ param2 = 22') # 创建批次 $ 专柜 = [pscustomob ……

如何在 Java 8 中创建一个阻塞的背景加载器?

的赏金 [https://stackoverflow.com/help/bounty]3 天后到期。这个问题的答案可以享受 200 声望奖励。罗兰 [/users/1844265/roland]正在寻找一个更详细的答案对于这个问题: 请提供一个工作代码示例。 问题 如何在 Java 8 中创建一个合适的背景加载器?条件: * 数据应该在后台加载 * 加载后应该显示数据 * 加载数据时,不应接受进一步的请求 * 如果在加载数据时有请求,则应在某个超时 (例如 5 秒) 后安排另一次加载 目的是让重新加载请求被接受,但不是数据库被请求淹没。 MCVE 这是一个 MCVE。它由一个后台任务组成,该任务通过简单地调用 Thread.sleep 2 秒来模拟加载。任务被安排在每秒钟,这自然会导致背景加载任务的重叠,这应该避免。 公共类 LoadInBackgroundExample { /* * * 一个简单的后台任务,应该执行数据加载操作。在这个最小的例子中,它只是调用 Thread.sleep */ 公共静态类 BackgroundTask 实现可运行 { 私人国际编号; 公共背景任务 ……

共6个回答, 标签: java multithreading java-8
在 cppreference 中,宽松排序的解释是错误的吗?

在的文件编制std::memory_order关于 cppreference.com [https://en.cppreference.com/w/cpp/atomic/memory_order]有一个宽松订购的例子: > 轻松订购 原子操作标记memory_order_relaxed不是同步操作; 它们不会在并发内存访问中强加顺序。他们只保证原子性和修改顺序的一致性。 例如,x 和 y 最初为零, //线程 1: R1 = y.load (std:: memory_order_relaxed);//A X.store (r1,std:: memory_order_relaxed);//B //线程 2: R2 = x.load (std:: memory_order_relaxed);//C Y.store (42,std:: memory_order_relaxed);//D 允许产生 r1 = = r2 = = 42,因为,尽管 A 是排序前线程 1 内的 B 和 C 是排序前D 在线程 2 内,没有什么能阻止 D 以 y 的修改顺序出现在 A 之前,而 B 以 x 的修改顺序出现在 C 之前 ……

共4个回答, 标签: c++ multithreading c++11 language-lawyer as-if
比赛条件面试问题: 整数的最小和最大范围

我最近在一次采访中被问到这个问题。 给定下面的代码,静态整数的最小和最大可能值是多少num? 导入 java.util.ArrayList; 导入 java.util.List; 公共类 ThreadTest { 私有静态 int num = 0; 公共静态无效 foo () { For (int i = 0; i <5; i) { Num; } } 公共静态 void main (String [] args) 抛出异常 { 列表线程 = 新的 ArrayList (); For (int i = 0; i <5; i) { 线程线程 = 新线程 (新任务 ()); 线程。添加 (线程); Thread.start (); } For (int i = 0; i <5; i) { Threads.get (i).join (); } //Num 的范围是什么? System.out.println (ThreadTest.num); } } 类任务实现可运行 { @ 覆盖 公共无效运行 () { ThreadTest.foo (); } } 我告诉他们最大值是 25 (如果没有比赛条件), ……

共3个回答,已解决, 标签: java multithreading race-condition
对象是否始终看到其最新的内部状态, 而不考虑线程?

假设我有一个可运行的简单整数计数变量, 每次可运行运行时都会递增。提交此对象的一个实例, 以便在计划的执行器服务中定期运行。 class Counter implements Runnable { private int count = 0; @Override public void run() { count++; } } Counter counter = new Counter(); ScheduledExecutorService executorService = Executors.newScheduledThreadPool(5); executorService.scheduleWithFixedDelay(counter, 1, 1, TimeUnit.SECONDS); 在这里, 对象访问其自身的内部状态在不同线程内 (读取和递增)。此代码是线程安全的, 还是当 count 变量计划在不同的线程中时, 我们可能会丢失对该变量的更新? ……

共3个回答,已解决, 标签: java multithreading concurrency
Java 循环中是否存在线程安全优化?

我有一个代码段, 它在两个线程中更改一个计数器。它不是线程安全的, 因为我没有在代码中放置任何原子变量或锁。如果代码只运行一次, 但我想运行几次, 它给出了正确的结果, 所以我把代码放到了 for 循环中。而问题是, 只有第一个或前两个循环才会生成我所期望的结果。对于循环的其余部分, 结果始终为 0, 这似乎是线程安全的。Java 虚拟机中是否有任何内部运算符导致这样的结果? 我尝试过更改循环的数量, 前一个或两个始终是我所期望的, 但其他的是 0, 无论有多少循环。 计数器: private static class Counter { private int count; public void increase() { count++; } public void decrease() { count--; } public int getCount() { return count; } } 人: // This is just a thread to increase and d ……

共3个回答,已解决, 标签: java multithreading thread-safety
如果我们有足够的处理器来服务所有线程,Thread.yield () 会做什么吗?

如果我们在一台有两个处理器的机器上有两个正在运行的线程,我们会调用螺纹的产量 ()在其中一个线程中,没有任何事情会发生 (调度程序基本上会忽略请求),因为我们有足够的处理器来为正在运行的线程提供服务,这是否合理? ……

共3个回答,已解决, 标签: java multithreading concurrency java-threads thread-synchronization
C 线程内循环打印错误的值

我试图理解 c + + 中的多线程,但是我陷入了这个问题: 如果我在 for 循环中启动线程,它们会打印错误的值。这是代码: # 包含 # 包含 # 包含 Void print_id (int id) { Printf (“来自线程 % d \ n 的 Hello”,id); } Int main () { Int n = 5; Std:: 列出线程 = {}; 对于 (int i = 0; i ` 我希望得到打印的值 0,1,2,3,4,但我经常得到相同的值两次。这是输出: 来自线程 2 的 Hello 来自线程 3 的 Hello 来自线程 3 的 Hello 来自线程 4 的 Hello 来自线程 5 的 Hello 我错过了什么? ` ……

共3个回答,已解决, 标签: c++ multithreading
多线程程序停留在优化模式,但在-O0 中正常运行

我写了一个简单的多线程程序如下: 静态布尔完成 = 假; Int func () { Size_t i = 0; While (!完成) 我; 返回 i; } Int main () { 自动结果 = std:: async (std:: launch:: async,func); Std:: this_thread:: sleep_for (std:: chrono:: seconds (1)); 完成 = 真; Std:: cout <<"result =" < ……

共3个回答,已解决, 标签: c++ multithreading thread-safety data-race
List:: empty () 多线程行为?

我有一个列表,我希望不同的线程从中获取元素。为了避免在列表为空时锁定保护列表的互斥体,我检查empty()锁定之前。 没关系,如果打电话list::empty() isn't right 100% of the time. I only want to avoid crashing or disrupting concurrent list::push() and list::pop()电话。 我可以安全地假设 VC + + 和 Gnu GCC 有时只会得到empty()错了,没什么更糟的? 如果 (list.empty () = = 假) {//不受互斥体保护,好吧,如果有时不正确 互斥锁 (); 如果 (list.empty () = = 假) {//在锁定时再次检查以确定 元素 = list.back (); List.pop_back (); } 互斥锁。解锁 (); } ……

共3个回答,已解决, 标签: c++ multithreading optimization race-condition stdlist
Julia (1.3) 中斐波那契序列的多线程并行性能问题

我正在尝试的多线程函数Julia 1.3使用以下硬件: 型号: MacBook Pro 处理器名称: 英特尔酷睿 i7 处理器速度: 2.8 GHz 处理器数量: 1 内核总数: 4 L2 高速缓存 (每个核心): 256 KB L3 高速缓存: 6 MB 超线程技术: 启用 内存: 16 GB 运行以下脚本时: 函数 F (n) 如果 n <2 返回 n 其他 返回 F (n-1) + F (n-2) 结束 结束 @ Time F (43) 它给了我以下输出 2.229305 秒 (2.00 k 分配: 103.924 KiB) 433494437 但是,当运行从Julia page 关于多线程 [https://julialang.org/blog/2019/07/multithreading] 导入 Base.Threads.@ spawn 函数 fib (n:: Int) 如果 n <2 返回 n 结束 T = @ 产卵 fib (n-2) 返回 fib (n-1) + fetch (t) 结束 Fib (43) 发生的情况是,RAM/CPU 的利用率从 3.2 GB/6% ……

共2个回答, 标签: multithreading julia fibonacci
Python 中可用处理器的数量 [重复]

这个问题在这里已经有了答案: * 如何使用巨蟒13个答案找出 Cpu 的数量 [/questions/1006289/how-to-find-out-the-number-of-cpus-using-python] 在 Java 中, 这将返回可用处理器的数量: Runtime.getRuntime().availableProcessors() 在决定要创建多少个长时间运行的线程时, 这很方便。 Python 中是否有等效函数可调用? ……

共2个回答,已解决, 标签: java python multithreading python-multithreading
为什么在线程销毁之前必须调用 join () 或 detach ()?

我不明白为什么当一个std::thread它必须处于 join () 或 detach () 状态。 Join 等待线程完成,detach 不等待线程完成。似乎有一些我不理解的中间状态。因为我的理解是连接和分离是互补的: 如果我不调用连接 (),默认情况下是 detach ()。 这样说吧,假设你正在编写一个创建线程的程序,直到这个线程的生命后期,你才调用 join (), 所以在你调用 join 之前,线程基本上是像分离一样运行的,不是吗? 逻辑分离 () 应该是线程的默认行为,因为这是线程的定义,不管其他线程如何,它们都是并行执行的。 那么,当线程对象被销毁时,为什么调用 terminate ()?为什么标准不能简单地将线程视为分离? 我不理解在线程被破坏之前没有调用 join () 或 detached () 时终止程序的理由。这样做的目的是什么? ……

共2个回答,已解决, 标签: c++ multithreading
在无限循环中睡眠不会抛出异常-为什么?

我的问题是InterruptedException,这是从睡眠。方法。在一起工作时执行服务我注意到一些我不理解的奇怪行为; 我的意思是: 遗嘱执行人 ExecutorService = 执行者。 newSingleThreadExecutor (); ()-> { 当 (真) { 做点什么 睡眠时间 (5000); } }); 有了这个代码,编译器不会给我任何错误或消息InterruptedException从睡眠。应该被抓住但是当我试图改变循环条件,用这样的变量替换 “true” 时: 遗嘱执行人 ExecutorService = 执行者。 newSingleThreadExecutor (); ()-> { 同时 (任务服务) { 做点什么 睡眠时间 (5000); } }); 编译器不断抱怨InterruptedException必须处理。有人能解释一下为什么会发生这种情况吗?如果条件设置为 true,编译器为什么会忽略 InterruptedException? ……

共2个回答,已解决, 标签: java multithreading
使用函数对象的 C 线程,如何调用多个析构函数而不是构造函数?

请找到下面的代码片段: TFunc 类 { Int x; 公众: TFunc () { Cout <<"construct:" < ` 我得到的输出是: 构造: 0x7ffe27d1b0a4 破坏: 0x7ffe27d1b06c 线程正在连接. 线程运行在: 11 销毁: 0x2029c28 X: 1 破坏: 0x7ffe27d1b0a4 我很困惑地址 0x7ffe27d1b06c 和 0x2029c28 的析构函数是如何调用的,没有调用构造函数?而第一个和最后一个构造函数和析构函数分别是我创建的对象。 ` ……

共2个回答, 标签: c++ multithreading destructor
函数仅由一个线程执行, 而不是多个

我编写了一个巨蟒脚本, 将市场数据导入到 MariaDB 数据库中。为了加快导入速度, 我决定使用模块线程。因此, 首先, 函数使用 urls 填充队列, 从中下载数据并将其导入到我的数据库中。不幸的是, 导入函数似乎只由一个线程而不是许多线程处理。 import queue from threading import Thread num_threads = 4 threads = [] urls = queue.Queue() def create_url(): ... getlist of items ... for row in item_list: url = 'https://someurl=' + str(row[0]) urls.put(url) return urls def import_mo(urls): station_id = 60003760 print(worker.getName()) try: mariadb_connection = mariadb.connec ……

共1个回答, 标签: python mysql multithreading queue
性能比非线程代码差的代码。需要优化一下

我写了一个代码,在相当于 200 MB 的文件中打印所有字符的总和。我想用多线程的方式执行它,但是我写的代码比非多线程的代码需要更多的时间! 在 Linux 下用 python2.7 写的我需要性能优化方面的帮助 导入线程 导入操作系统 导入系统 导入时间 L = 0 长度 = [] Def file _ opener (键,l): 键中的行: L = l + len (线)-1 长度.追加 (l) L = 0 如果 _ _ name _ _ = = "_ _ main _ _": 开始 = 时间。时间 () F = 打开 (sys.argv [1],“r”) 要分析的文件是 % s "% sys.argv [1] 线程 = [] 钥匙 = [] 对于范围 (100) 中的 i: 尝试: 对于范围 (200000) 内的 j: Append.append (f.next ()) 除: 通行证 T = 线程。线程 (target = file _ opener,args = (keys,l)) 开始 () 钥匙 = [] 打印 “已创建线程 % d” % i Threads.append (t) 对于线程中 ……

共1个回答, 标签: python multithreading python-2.7
并促使线程提供内存才能保证自己?

我想大概这个: 最初的主题: * 写一些价值的全球增值经销商 (也不会再写一次) * 这可能是中等大数据 (阵列,弦乐,等等)。不能简单地做std::atomic<>。 * 引发其他线程 其他线程: * 读了全局状态 * 做工作,等等。 现在,我知道我可以传参数std::thread,但我想知道内存保证 C 通过这个例子。 还有,我很自信的实际执行,创建一个线程会导致内存屏障,线程可以 "看" 父线程所做的一切都写到这点。 但我的问题是: 这是保证的标准? 旁白: 我想我会添加一些假std::atomic 左右,写到这之前的其他主题,然后在其他线程,阅读,一旦启动。我认为所有的事-前之前--写给全球机制将确保国家的正常可见。 但我的问题是,差不多是技术上的要求,或为主题创作就够了吗? ……

共1个回答,已解决, 标签: c++ multithreading
如何防止主线程执行下一行直到最后一行完全执行

首先,我是弹簧靴的新手。我想废弃一个新闻网站,以便创建一个 rest api。我所做的只是创建一个路由,负责在刮新闻网站后为最新新闻创建 json 响应。这是路线 @ GetMapping ("/最新") 公共 ArrayList 废料 () { 字符串标题 = ""; 文档文档; 元素体; ArrayList 元素 = new ArrayList <> (); ArrayList 结果 = 新的 ArrayList <> (); ArrayListli; 尝试 { Doc = Jsoup.connect ("https://timesofindia.indiatimes.com").get ();//错误发生在这里 Title = doc.title (); Body = doc.body (); Elements = body.Getementsbyattributevalue (“数据-vr-zone”,“最新”); System.out.println (“大小” 元素。大小 ()); Li = 元素。获取 (0)。选择 (“li> a”); System.out.println ……

共1个回答, 标签: java multithreading spring-boot
CPU 基准测试: 任务 vs 线程池 vs 线程

我贴了这里的另一个问题 [https://stackoverflow.com/questions/56425062/threadpool-thread-doing-i-o-operation-can-thread-be-reused-while-waiting] 作为后续,我的同事做了一个测试,如下所示,作为异步/等待/任务参数的某种形式的 “计数器”。 (我知道,lock不需要在结果列表上,忽略这一点) * 我知道异步/等待和任务是不用于处理 CPU 密集型任务,而是处理操作系统完成的 I/O 操作。下面的基准测试是 CPU 密集型任务,所以测试从一开始就有缺陷。 * 然而,据我所知,使用new Task().Start() 将调度线程池上的操作,并在线程池上的不同线程上执行测试代码。这是否意味着第一次和第二次测试或多或少是一样的?(我猜不是,请解释一下 * 为什么他们之间的差异很大? enter image description here [https://i.stack.imgur.com/XEYfB.png] [https://i.stack.imgur.com/XEYfB. ……

共0个回答, 标签: c# multithreading async-await task